函数式接口functionalinterface
定义有且只有一个抽象方法,但可以有多个非抽象方法的接口。也称SAM接口,即SingleAbstractMethodinterfaces
特点:
这样的接口,可以被隐式转换为lambda表达式。在Java8里面,所有的Lambda的类型都是一个接口,而Lambda表达式本身,也就是”那段代码“,需要是这个接口的实现。只要符合函数式接口的定义就是函数式接口,与是否有@FunctionalInterface注解无关,注解只是在编译时起到强制规范定义的作用,为了避免后来的人在这个接口中增加接口函数导致其有多个接口函数需要被实现,变成'非函数接口”,我们可以在这个上面加上一个声明@FunctionalInterface
内置函数式接口(Built-inFunctionalInterfaces)
Consumer[美/kənˈsuːmər/]消耗者
Stream stream = Stream.of('aaa', 'bbb', 'ddd', 'ccc', 'fff');
//1
Consumer consumer = new Consumer() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
stream.forEach(consumer);
//2
Consumer consumer = (s) -> System.out.println(s);
stream.forEach(consumer);
//3
stream.forEach(System.out::println);
Supplier
//1
Supplier supplier = new Supplier() {
@Override public Double get() {
// 返回一个随机值
return new Random().nextDouble();
}
};
System.out.println(supplier.get());
//2
supplier = () -> new Random().nextDouble();
System.out.println(supplier.get());
//3
supplier = Math::random;
System.out.println(supplier.get());
Predicate[美/ˈpredɪkət;ˈpredɪkeɪt/]谓语,断言
//1
Predicate predicate = new Predicate() {
@Override
public boolean test(Integer integer) {
return integer > 5;
}
};
System.out.println(predicate.test(1));
//2
predicate = (t) -> t > 5;
System.out.println(predicate.test(1));
Function
// 1
Function function = new Function() {
@Override
public Integer apply(String s) {
return s.length();
}
};
Stream stream = Stream.of('aaa', 'bbbbb', 'ccccccv');
Stream stream1 = stream.map(function);
stream1.forEach(System.out::println);
// 2
Function function1 = (s)-> s.length();
Stream.of('aaa', 'bbbbb', 'ccccccv').map(function1).forEach(System.out::println);
Comparator比较器【美/ˈkɑːmpəˌreɪtər;kəmˈpærətər/】比较器
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点