Java学习笔记(2)使用java.util.function包
2019-03-28 本文已影响0人
浩神
上节提到Lambda是实例化单抽象方法接口(函数式接口)的语法糖。
那么我们在使用Lambda的时候,第一步是否需要先去构建一些接口呢? 如我们想写一个打印的Lambda, 我们必须先构建一个接口:
// 想用Lambda? 先定义一个接口吧
interface Printable {
String print();
}
public class Example {
public static void main(String args[]) {
Printable printer1 = () -> "Print something";
System.out.println(printer1.print());
}
}
使用Lambda先定义接口?
Java8给我们定义了一些函数式接口,这些接口在 java.util.function包里面,主要分成下面四种:
- Consumer接口: 接受一个参数,但不返回(consumer也有消费者的意思)
- Suplier接口:不接收参数,但返回一个值(Suplier也有供应者的意思)
- Predicate接口: 接受一个参数,返回true或者false(predicate也有断定的意思)
- Function接口: 接受一个参数,返回一个值
上面我们提到的Printable接口,就可以用Suplier接口定义:
public static void main(String args[]) {
Supplier printer2 = () -> "Print something";
System.out.println(printer2.get());
}
其实,function包最多的还是用在stream和数组、list等操作。如:
-
Iterable接口的foreach方法:
void forEach(Consumer<? super T> action)
- Stream.allMatch(Predicate<? super T> predicate) // 使用Predicate做筛选
- Stream.map中,使用Function接口做map
- Optional.orElseGet方法中,使用Suplier获取一个值