我是这么理解的,java是面向对象的,但是为了写起来方便,需要向一个方法传递一个方法,但是实际上并不能传递方法,而是传递了只有一个抽象方法的接口的实现类的对象,这样就做到类似传递方法了,其实lanmada就是一个对象
四、四种核心的函数式接口
1、功能性接口Function
接收一个功能参数t,并返回一个功能结果R。
package java.util.function; import java.util.Objects; @FunctionalInterface public interface Function<T, R> { R apply(T t); default <V> Function<V, R> compose(Function<? super V, ? extends T> before) { Objects.requireNonNull(before); return (V v) -> apply(before.apply(v)); } default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) { Objects.requireNonNull(after); return (T t) -> after.apply(apply(t)); } static <T> Function<T, T> identity() { return t -> t; } }
2、断言性接口:Predicate
主要用到test方法 其中参数t为输入参数,如果输入参数符合断言则返回true,否则false
package java.util.function; import java.util.Objects; @FunctionalInterface public interface Predicate<T> { boolean test(T t); default Predicate<T> and(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) && other.test(t); } default Predicate<T> negate() { return (t) -> !test(t); } default Predicate<T> or(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) || other.test(t); } static <T> Predicate<T> isEqual(Object targetRef) { return (null == targetRef) ? Objects::isNull : object -> targetRef.equals(object); } }
3、供给性接口:Supplier
不接收任何参数 但有返回值
@FunctionalInterface public interface Supplier<T> { T get(); }
4、消费性接口:Consumer
只接收一个参数t,但是没有返回值。
五、Lambda表达式
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用 Lambda 表达式来实现。Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
简单明了,函数式接口就是为了Lambda 表达式而生的。
六、Lambda表达式的推导过程
1、匿名内部类 --> Lambda表达式 --> 简化Lambda表达式
package java8.lamda; public class LamdaTest { public static void main(String[] args) { //匿名内部类 IStudent student = new IStudent() { @Override public void study(String technology,int time) { System.out.println("匿名内部类,"+technology+time); } }; student.study("java",8); # 写在最后 **以上分享的全部资料都可免费分享领取——** **[【点击这里下载】](https://gitee.com/vip204888/java-p7)** 还有一份JAVA核心知识点整理(PDF):**JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC**,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,**MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存**,Hadoop,Spark,Storm,YARN,机器学习,云计算... om/vip204888/java-p7)** 还有一份JAVA核心知识点整理(PDF):**JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC**,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,**MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存**,Hadoop,Spark,Storm,YARN,机器学习,云计算... ![image](https://ucc.alicdn.com/images/user-upload-01/img_convert/7a3eb87b619244894e58c940554e8631.png)