Lambda元素规约

简介: Lambda元素规约

image.png

规约:大致可以理解为将一个数组或集合转换成一个String或integer类型的一个对象。最终只拿到一个结果。
关键字:reduce reduce(a,(b,c)->{b+c});
a:规约初始值
b:阶段性的累加结果
c:当前遍历的元素
若是整数类型求和 (Integer),b和c 可换成方法引用 Integer::sum

image.png

先回顾一下map: stream().map 可以把数组中的元素从一种类型转换成另一种类型,也可以将多类型的集合变成单纯的只有一种类型的集合。
public class Reduce {

public static void main(String[] args) {
    People p=new People("小明",19,"man");
    People p2=new People("小花",16,"man");
    People p3=new People("小刚",17,"man");
    People p4=new People("小龙",15,"man");
    People p5=new People("小新",20,"man");
    People p6=new People("小舞",18,"woman");
    List<People> list =new ArrayList<>();
    list.add(p);
    list.add(p2);
    list.add(p3);
    list.add(p4);
    list.add(p5);
    list.add(p6);

    Integer res = list.stream().map(People::getAge).reduce(0,(a,b)->a+b);
    System.out.println(res);//105

    Integer reduce = list.stream().map(People::getAge).reduce(0, Integer::sum);
    System.out.println(reduce); //105

}

}
规约并行:
我们都知道,stream()是可以并行的。就是可以充分利用cpu核数发挥cpu运行的最大效率。
并行关键字:parallelStream()

image.png

以上图所示,并行会对过程分组计算,之后得出两组,一个三,一个七,之后使用合并器,对两组结果进行累加计算得出最后结果。所谓合并器,就是对并行的每组结果进行累加。
Integer reduce2 = list.parallelStream().map(People::getAge).reduce(0, Integer::sum,Integer::sum);
System.out.println(reduce2); //105
上面reduce第三个参数 Integer::sum 就是合并器
如果数据量较大时推荐使用parallelStream()并行运算,可以充分发挥cpu性能,提高运行效率。

Integer red = list.stream().reduce(0, (a, people) -> a + people.getAge(), Integer::sum);
System.out.println(red);//105
上面的reduce第三个参数就是合并器的第二个功能了: 当返回结果不一致时可以用合并器进行一个转型。

综上:
当对数组进行累加操作时推荐使用规约。尤其推荐并行规约。
合并器:
对并行的累加结果进行最后统计
对于每组结果类型不一致时进行累加后转型

目录
相关文章
|
24天前
|
Scala
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
11 0
|
2月前
|
JavaScript 前端开发 Java
23、匿名类的排序、Lambda 表达式、方法引用
23、匿名类的排序、Lambda 表达式、方法引用
23 0
|
2月前
|
分布式计算 Java 大数据
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
60 0
|
存储 算法 编译器
【C++】lambda 表达式 | 包装器
【C++】lambda 表达式 | 包装器
【C++】lambda 表达式 | 包装器
|
Scala 开发者
Scala 上界介绍和应用实例2 | 学习笔记
快速学习Scala上界介绍和应用实例2
80 0
Scala 上界介绍和应用实例2 | 学习笔记
|
Java Scala 开发者
Scala 上界介绍和应用实例1 | 学习笔记
快速学习 Scala 上界介绍和应用实例1
68 0
Scala 上界介绍和应用实例1 | 学习笔记
|
JavaScript 前端开发 Java
第23篇:匿名类的排序、Lambda 表达式、方法引用
🔖 Lambda Expression 是 Java8 开始才有的语法 🔖 函数式接口(Functional Interface):只包含1个抽象方法的接口(可以包含多个默认方法和静态方法) 📕 可以在接口上加上@FunctionalInterface注解,表示它是一个函数式接口 🔖 当匿名类实现的是函数式接口的时候,可以使用 Lambda 表达式简化代码的书写(但是匿名类和 Lambda 在作用域上还是有点区别的)
192 0
Lambda 实战-两个不同的集合合并成一个新的集合
Lambda 实战-两个不同的集合合并成一个新的集合
|
Java 编译器
Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)
Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)
204 0
Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)
|
Java
【Groovy】集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )
【Groovy】集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )
163 0
【Groovy】集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )