文章目录
- 一、函数式接口
- 二、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();