Lambda表达式学习

Lambda表达式

1 介绍

Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。 JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。

2 对接口的要求

虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用 Lambda 表达式来实现。Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法

jdk 8 中有另一个新特性:default, 被 default 修饰的方法会有默认实现,不是必须被实现的方法,所以不影响 Lambda 表达式的使用。

3 @FunctionalInterface

修饰函数式接口的,要求接口中的抽象方法只有一个。 这个注解往往会和 lambda 表达式一起出现。

4 Lambda 基础语法

我们这里给出六个接口,后文的全部操作都利用这六个接口来进行阐述。

 

 

 

 语法形式为 () -> {},其中 () 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符 ,读作(goes to)

 

Lambda语法简化

 

Lambda常用示例

1 lambda表达式引用方法

有时候我们不是必须要自己重写某个匿名内部类的方法,我们可以可以利用 lambda表达式的接口快速指向一个已经被实现的方法。

语法

方法归属者::方法名 静态方法的归属者为类名,普通方法归属者为对象

 

2 构造方法的引用

一般我们需要声明接口,该接口作为对象的生成器,通过 类名::new 的方式来实例化对象,然后调用方法返回对象。

3 Function接口

 

 Function有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法
 compose方法表示在某个方法之前执行
 andThen方法表示在某个方法之后执行
注意:compose和andThen方法调用之后都会把对象自己本身返回,这可以方便链式编程
default <V> Function<T,V> andThen(Function<? super R,? extends V> after) 返回一个先执行当前函数对象apply方法再执行after函数对象apply方法的函数对象。

 default <V> Function<T,V> compose(Function<? super V,? extends T> before)返回一个先执行before函数对象apply方法再执行当前函数对象apply方法的函数对象。

 static <T> Function<T,T> identity() 返回一个执行了apply()方法之后只会返回输入参数的函数对象

4 Supplier接口

Supplier接口返回一个任意范型的值,和Function接口不同的是该接口没有任何参数

5 Consumer接口

Consumer接口接收一个任意范型的值,和Function接口不同的是该接口没有任何值

 

总结:
         Function<T, R>  接口   R apply(T t);       有参数有返回值
        Supplier<T>      接口   T get();             没参数有返回值
        Consumer<T>    接口   void accept(T t);  有参数没返回值

6 Stream 接口

   Stream 操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果,
而中间操作返回Stream本身,这样你就可以将多个操作依次串起来(链式编程)。
  Stream 的创建需要指定一个数据源,比如 java.util.Collection的子类,List或者Set, Map不支持。
 Stream的操作可以串行执行或者并行执行。
 Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。

 

7 并行Streams

Stream有串行和并行两种,串行Stream上的操作是在一个线程中依次完成,而并行Stream则是在多个线程上同时执行

 

posted @ 2020-10-17 15:29  爱上我的字节码  阅读(82)  评论(0)    收藏  举报