JDK8新特性,记录常用的知识点

文章目录

  • 一、函数式接口
  • 二、Lambda表达式
  • 三、Stream
  • 四、Optional

一、函数式接口

  • 只包含一个抽象方法的接口,称为函数式接口
  • 并且可以使用lambda表达式来创建该接口的对象,
  • 可以在任意函数式接口上使用@FunctionalInterface注解,来检测它是否是符合函数式接口。
  • 同时javac也会包含一条声明,说明这个接口是否符合函数式接口。

1. 自定义函数式接口

@FunctionalInterface
public interface MyNuber{
	public double getValue();
}

二、Lambda表达式

Lambda表达式只能使用在函数式接口

// 普通方法:实现一个函数式接口
Runnable r1 = new Runnable(){
	@Override
	public void run(){
		System.out.println("我爱北京天安门");
	}
};

// JDK8新特性:无参数
Runnable r2 = ()->{System.out.println("我爱北京天安门");};

// JDK8新特性:有参数
Runnable r2 = (String str)->{System.out.println(str);};

三、Stream

// filter 过滤流
public void testFilter() {
    Integer[] arr = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    // 输出:4 5 6 7 
    Arrays.stream(arr).filter(x -> x > 3 && x < 8).forEach(System.out::println);
}

// map 转换流
public void testMap() {
    String[] arr = new String[]{"yes", "YES", "no", "NO"};
    // 输出:yes yes no no
    Arrays.stream(arr).map(x -> x.toLowerCase()).forEach(System.out::println);
}

四、Optional

总结概述

  • Optional.of(T t) : 创建一个 Optional 实例
  • Optional.empty() : 创建一个空的 Optional 实例
  • Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
  • isPresent() : 判断是否包含值
  • orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
  • orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值

使用示例

// 创建optional对象,一般用ofNullable()而不用of()
Optional<String> emptyOpt = Optional.empty();
Optional<String> notNullOpt = Optional.of(str);
Optional<String> nullableOpt = Optional.ofNullable(str);

工作实例

Optional<User> userOptional = new LambdaQueryChainWrapper<>(userMapper)
									.eq(User::getToken,userToken)
									.oneOpt();

你可能感兴趣的:(java,开发语言)