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第三个参数就是合并器的第二个功能了: 当返回结果不一致时可以用合并器进行一个转型。

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

目录
相关文章
|
1月前
|
Java 索引
【java进阶】集合的三种遍历(迭代器、增强for、Lambda)
【java进阶】集合的三种遍历(迭代器、增强for、Lambda)
【java进阶】集合的三种遍历(迭代器、增强for、Lambda)
|
8月前
|
Java 编译器 API
4.3 Lambda表达式的性能与限制:在某些情况下避免使用Lambda表达
4.3 Lambda表达式的性能与限制:在某些情况下避免使用Lambda表达
572 0
|
9月前
|
Java 开发者
lambda让代码更优雅
Lambda表达式是Java 8中引入的一个重要特性,它允许开发者以更简洁的方式编写匿名函数,使得代码更加紧凑和易读。Lambda表达式是函数式编程的一种体现,可以将函数作为方法的参数传递,并且可以使用更简洁的语法实现函数式接口(只有一个抽象方法的接口)的实例化。Lambda表达式的语法形式为 (参数列表) -> {表达式或语句块}。
53 0
|
编译器 C++
C++中Lambda函数的含义及其本质
C++中Lambda函数的含义及其本质
290 0
C++中Lambda函数的含义及其本质
|
存储 算法 编译器
【C++】lambda 表达式 | 包装器
【C++】lambda 表达式 | 包装器
【C++】lambda 表达式 | 包装器
Lambda 实战-两个不同的集合合并成一个新的集合
Lambda 实战-两个不同的集合合并成一个新的集合
|
Java 编译器
Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)
Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)
199 0
Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)
|
存储 自然语言处理 安全
Java 8 新特性:Lambda 表达式的作用域(Lambda 表达式补充版)
Java 8 新特性:Lambda 表达式的作用域(Lambda 表达式补充版)
539 0
C# Lambda的简单应用的记录
在C#的List集合中,我们时常需要使用到大量的运算或者筛选等操作,按常规的方式无非就是利用foreach或者for对List集合进行循环操作,最后运算出结果。此种方法往往需要写多行语句,阅读性稍微差点,而Lambda表达式一条语句完成。
|
并行计算 编译器
Lambda 表达式(使用前提、“类型推断”、作用、优缺点、Lambda还能省略的情况)
Lambda 表达式(使用前提、“类型推断”、作用、优缺点、Lambda还能省略的情况)
268 0