首页 > 其他分享 >Lambda表达式可并行性

Lambda表达式可并行性

时间:2024-07-02 09:55:29浏览次数:20  
标签:sum 并行性 intValue numbers 操作 Integer 表达式 Lambda

今天补充Lambda表达式知识的时候,有一个可并行性的特性:

// 使用 Lambda 表达式和 Stream API 进行并行计算
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream().mapToInt(Integer::intValue).sum();

上面的代码中,使用Lambda表达式结合了Stream API 进行并行计算操作。

下面详细解释一下这两行代码:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

建立一个列表 numbers

int sum = numbers.parallelStream().mapToInt(Integer::intValue).sum();

.parallelStream()对numbers数组进行流处理,创建一个并行流,下面的操作会分在多个线程上进行执行,提高执行效率。

.mapToInt(Integer::intValue)该方法将所有的Integer对象转化成int基本数据类型,Integer::intValue是一个方法调用,表示调用Integer对象的intValue方法。

.sum()对所有的元素进行求和。

补充:
并行流的操作主要在 中间操作 和 终端操作 过程中。

并行流处理的步骤:

  1. 创建并行流,例如:.parallelStream()
  2. 中间操作,例如:.mapToInt()
  3. 终端操作,例如:.sum()

并行流处理的三个阶段(对应三个步骤):

  1. 源数据拆分:流转化成并行流的时候,任务会被拆分成多个子任务,多个子任务均匀分配给多个线程
  2. 并行处理:并行执行一些列的中间操作,比如过滤、映射、排序等操作
  3. 结果合并:通过终端操作(比如collect、reduce、forEach等)将每个子任务的结果合成一个结果集。

再看一个例子:

List<Integer> numbers = Array.asList(1,2,3,4,5);
List<Integer> result = numbers.paralleStream()
							  // 中间操作:过滤偶数、数字乘2
							  .filter(n-> n % 2 == 0)
							  .map(n -> n * 2)
							  // 终端操作:将结果收集到一个List里
							  .collect(collector.toList());

标签:sum,并行性,intValue,numbers,操作,Integer,表达式,Lambda
From: https://www.cnblogs.com/rdisheng/p/18279315

相关文章

  • C/C++ 赋值表达式注意事项
    在C/C++中,赋值表达式是基础且关键的一部分,它用于给变量赋值。理解和正确使用赋值表达式对于编写有效、可维护的代码至关重要。以下是一些关于C/C++赋值表达式的注意事项:赋值操作符:在C/C++中,赋值是通过赋值操作符=完成的。这意味着将右侧的值或表达式的结果赋给左侧的变......
  • 正则表达式
    正则模式^表达式$^从整个字符串开头的地方匹配$从整个字符串的结尾开始匹配模糊匹配.匹配任意字符,除了换行符*重复匹配*号前面0个或多个的表达式。?重复匹配?号前面0个或1个由前面的正则表达式定义的片段,非贪婪方式(?写在数量词的之后)+重复匹配+号前面1个或多......
  • 常用正则表达式
    一、校验数字的表达式 1数字:^[0-9]*$ 2n位的数字:^\d{n}$ 3至少n位的数字:^\d{n,}$ 4m-n位的数字:^\d{m,n}$ 5零和非零开头的数字:^(0|[1-9][0-9]*)$ 6非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,......
  • 正则表达式
    正则表达式目录正则表达式一、正则表达式的概述1、概念2、作用3、可达到的目的二、基础正则1、字符匹配元字符1.2、实例1.2.1.(匹配任意单个字符)1.2.2[](匹配指定范围内的任意单个字符)1.2.3[^]匹配指定范围外的任意单个字符2、表示次数的元字符2.1实例2.1.1*2.1.2.*2......
  • Leetcode150.逆波兰表达式求值(Java)
    题目:        给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。    栈的典型例题。题目要求为:求后缀表达式值。示例 1:输入:tokens=["2","1","+","3","*"]输出:9解释:该算式......
  • 探索Java正则表达式的奥秘:源码之旅与高级应用
    1.引言在Java编程中,正则表达式(RegularExpression,简称Regex)是一个强大的工具,用于处理字符串匹配、查找和替换等任务。Java提供了java.util.regex包来支持正则表达式的功能。对于Java工程师来说,理解其背后的工作原理和源码实现,可以进一步掌握其性能特性和最佳实践。2.ja......
  • 学懂C#编程:常用高级技术——委托(Delegate)应用场景——委托与Lambda表达式的结合使用详
            在C#中,委托与Lambda表达式的结合使用是现代编程实践中的一个重要且强大的特性,它极大地提高了代码的简洁性和可读性。下面将详细讲解这两个概念如何协同工作,以及如何在实际编程中有效利用它们。委托基础        委托是C#中的一种引用类型,它允许封装一......
  • Java正则表达式
    Java正则表达式1.正则表达式是什么?正则表达式是用于匹配和操作文本模式的工具。它由字符和特殊元字符组成,能够实现强大的文本搜索、验证、替换等功能。2.正则表达式基本语法(1)匹配普通字符匹配数字[0123456789]简写为[0-9]匹配小写字母[a-z]匹配大写字母[A-Z]匹配大小......
  • Java Lambda 表达式中为何不能访问局部定义的变量?
    问题展示代码:publicstaticvoidtest01(){Stringstr="str";newThread(()->{str+="yes";System.out.println(str);}).start();}在jdk1.8下,在lambda表达式中访问str,编译器未报错;提示我不可访问非f......
  • SpringTask Cron表达式
    Cron表达式格式1.Cron表达式格式Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:秒分时一个月第几天月一个星期第几天年(1)SecondsMinutesHoursDayofMonthMonthDayofWeekYear(2)Seconds......