Lambda表达式和函数式接口
Lambda表达式定义
Lambda 表达式是 JDK 1.8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
函数式接口定义
面向对象的思想:
做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情。
函数式编程思想:
只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程。
有且仅有一个抽象方法的接口就是函数式接口,Java中的函数式编程体现就是Lambda,Lambda表达式也必须依靠函数式接口。
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
函数式接口的使用
public interface FunctionInterfaceDemo {
public abstract void print(String message);
}
Lambda表达式的使用
public static void realizeFunction(String message,FunctionInterfaceDemo demo){
demo.print(message);
}
public static void main(String[] args) {
realizeFunction("Hello",(message)->{
System.out.println(message);
});
}
常用函数式接口
主要位于java.util.function
1.1 Supplier接口(生产接口)
方法: T get();
对外提供一个符合泛型类型的对象数据。
1.2 Consumer接口(消费接口)
方法(1):void accept(T t);
消费传入的数据,即对数据进行一次自定义处理。
方法(2):default Consumer andThen(Consumer<? super T> after)
消费传入的数据,对数据进行两次自定义处理。
1.3 Predicate接口(断言接口)
方法(1):boolean test(T t);
对传入的数据,进行判断,返回判断的结果。
方法(2):default Predicate and(Predicate<? super T> other)
将两个Predicate条件使用“与”逻辑连接起来实现“并且”的效果。
方法(3):default Predicate or(Predicate<? super T> other)
将两个Predicate条件使用“或”逻辑连接起来实现“或”的效果。
方法(4):default Predicate negate()
取反,对test(T t)判断后的结果进行取反。
1.4 Function接口(转换接口)
方法(1):R apply(T t);
对传入的数据类型T,进行处理为R类型数据,并返回。
方法(2):default Function<T, V> andThen(Function<? super R, ? extends V> after)
对传入的数据类型进行两次处理后,返回我们需要的数据类型。
XFS