java学习笔记17-函数式接口

在java中只有一个抽象方法的接口叫函数式接口
"语法糖"指的是使用更加方便但原理不变的代码语法

@FunctionalInterface java8为函数式接口专门引入了一个新的注解,用了这个注解,编译器会强制检查接口中是否只有一个抽象方法.但不用也符合函数式接口定义的,仍可以直接使用

函数式接口典型的使用方法就是方法的参数以及方法的返回值

有些场景的代码,程序执行后不一定会用,从而造成性能的浪费(例如日志案例,字符串拼接).lambda表达式具有延迟执行的特点,避免程序性能浪费.

实际上使用内部类也可以达到同样的效果,只是将代码操作延迟到另一个对象当中,通过调用方法来完成.而是否调用方法是在条件判断后决定的

java.util.function包中提供了大量的函数式编程接口

java.util.function.Supplier T get() 生产一个数据
java.util.function.Consumer void accept(T t) 消费一个数据 一个方法的参数和返回值全都是Consumer 类型 那就是 andThen方法 Consumer andThen(Consumer after){ Objects.requireNonnull(after); return s-> {a.accept(s);after.accept(s)};} 这样可以实现一个组合动作

java.util.function.Predicate 有时候我们需要对某种类型的数据进行判断,返回一个boolean值的结果,这就需要使用此接口
predicate有一个抽象方法用于条件判断的场景 Boolean test(T t)
predicate还有默认方法default Predicate and(Predicate other){Objects.requireNonNull(other); return s-> a.test(s)&&other.test(s);}
默认方法or与and方法类似 实现||逻辑
default Predicate negate { t-> !test(t)} 默认方法取反

java.util.function.Function<T,R> 根据一个类型的数据得到另一个类型的数据,前者叫做前置条件,后者叫做后置条件
抽象方法apply R apply(T t) 根据一个类型的数据获得另一个类型的数据
Function中有默认方法andThen用来进行组合操作 default Function<T,V> andThen(Function<? super R,? extends V> after){Objects.requireNonNull(after);after.apply(apply(t)}用于先做什么再做什么的场景

猜你喜欢

转载自blog.csdn.net/wwzzh1989/article/details/89209068