lambda表达式

 

lambda表达式的语法格式如下:

 

(parameters) -> expression或(parameters) ->{ statements; }

以下是lambda表达式的重要特征:

可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
 

1.利用lambda表达式对列表进行迭代

控制台:

也可以用:list1.forEach(System.out::println);

这是java8的另一个特性,方法的引用,不过这种没法传递参数,只能用::调用不需要参数的方法

2.使用lambda表达式替代匿名内部类

() -> {}替代了匿名内部类

3.使用lambda表达式和函数式接口Predicate

java8新增了一个包,叫做 java.util.function,接口里面包含了很多类,用来支持函数式编程,其中有一个接口就是Predicate,用Perdicate可以用来过滤,下面我们展示一下过滤集合的相关数据

直接在filter中写过滤条件或者传入一个Predicate都行,有人或许说既然可以直接写过滤条件,用Predicate是不是有点多余了,不不,继续看,你就知道为什么要用Predicate了

 

4.Predicate之多个过滤条件

若需要多个过滤条件,而不是单单的一个过滤条件,那么怎么实现呢。Predicate提供类似于逻辑操作符AND和OR的方法,名字叫做and()和or(),用于将传入 filter() 方法的条件合并起来。

and()将满足条件的结果查询出来,or()将满足其中任意一个条件的结果查询出来

4.lambda表达式之map

map()统一对元素进行操作

结果:

5.lambda表达式之reduce()

reduce() 函数可以将所有值合并成一个。Map和Reduce操作是函数式编程的核心操作,因为其功能,reduce 又被称为折叠操作。另外,reduce 并不是一个新的操作,你有可能已经在使用它。SQL中类似 sum()、avg() 或者 count() 的聚集函数,实际上就是 reduce 操作,因为它们接收多个值并返回一个值。流API定义的 reduceh() 函数可以接受lambda表达式,并对所有值进行合并。IntStream这样的类有类似 average()、count()、sum() 的内建方法来做 reduce 操作,也有mapToLong()、mapToDouble() 方法来做转换。这并不会限制你,你可以用内建方法,也可以自己定义。

得到的值就是list2集合中的每个元素乘以0.2以后的加和

6.lambda表达式之collect()

将操作之后的结果转换为集合

结果:

将操作之后的结果进行连接

结果:

7.lambda表达式之distinct()去重

结果:

8.计算集合元素的最大值,最小值等

IntStream、LongStream 和 DoubleStream 等流的类中,有个非常有用的方法叫做 summaryStatistics() 。可以返回 IntSummaryStatistics、LongSummaryStatistics 或者 DoubleSummaryStatistic s,描述流中元素的各种摘要数据。在本例中,我们用这个方法来计算列表的最大值和最小值。它也有 getSum() 和 getAverage() 方法来获得列表的所有元素的总和及平均值

结果:

注:lambda表达式有个限制,那就是只能引用 final 或 final 局部变量,这就是说不能在lambda内部修改定义在域外的变量。

编译的时候就报错,注意,可以访问但是不能修改
————————————————
版权声明:本文为CSDN博主「请叫我小叶子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaoye319/article/details/80451977

你可能感兴趣的:(lamdba)