Java中学习Lambda表达式和stream中parallel并行方法

2024-04-06 22:12

本文主要是介绍Java中学习Lambda表达式和stream中parallel并行方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Java中学习Lambda表达式和stream中parallel并行方法

  • 一、介绍
    • 二、整体代码


一、介绍

Lambda表达式是Java中一种方便的函数式编程风格,可以在集合操作中大大简化代码。而parallel()方法则是Java 8中引入的并发处理方法,可以让集合操作更快速高效。下面我们来学习一下如何使用parallel()方法来提升集合操作的效率。

首先,我们创建一个包含一百万个随机字符串的ArrayList:

ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 1000000; i++) {list.add(RandomUtil.randomString(RandomUtil.BASE_CHAR, 6));
}

接下来,我们使用Lambda表达式和stream API来筛选出带有字母"s"的字符串,并比较使用parallel()方法和不使用parallel()方法的效率差异:

// 串行处理
long firstStartTime = System.currentTimeMillis();
List<String> slowCollect = list.stream().filter(s -> s.contains("s")).collect(Collectors.toList());
long firstEndTime = System.currentTimeMillis();
log.info("计算耗时" + (firstEndTime - firstStartTime));// 并行处理
long secondStartTime = System.currentTimeMillis();
List<String> fastCollect = list.stream().parallel() // 并发处理.filter(s -> s.contains("s")).collect(Collectors.toList());
long secondEndTime = System.currentTimeMillis();
log.info("并发处理计算耗时" + (secondEndTime - secondStartTime));

通过以上代码,我们可以看到,在处理一百万个随机字符串时,使用parallel()方法可以显著提升处理效率。这是因为parallel()方法可以利用多线程并行处理集合中的元素,从而加快处理速度。

需要注意的是,并发处理并不是在所有情况下都会比串行处理更快,有时候还会带来额外的性能开销。因此,在实际应用中,需要根据具体情况来选择是否使用parallel()方法来优化集合操作。

二、整体代码

    void test() {ArrayList<String> list = new ArrayList<>();//录入一百万个随机字符串for (int i = 0; i < 1000000; i++) {
//            list.add(IdUtil.simpleUUID().substring(0,6));/*** randomString方法的* 第一个参数是字符集,比如* RandomUtil.BASE_CHAR_LOWER表示小写字母,* RandomUtil.BASE_CHAR_UPPER表示大写字母,* RandomUtil.BASE_CHAR_SIMPLE表示大小写字母的组合。* 第二个参数是生成字符串的长度。*/list.add(RandomUtil.randomString(RandomUtil.BASE_CHAR, 6));}/*** 筛选字符串中带有s的字符串*///开始时间long firstStartTime = System.currentTimeMillis();List<String> slowCollect = list.stream().filter(s -> s.contains("s")).collect(Collectors.toList());//结束时间long firstEndTime = System.currentTimeMillis();log.info("计算耗时" + (firstEndTime - firstStartTime));//开始时间long secondStartTime = System.currentTimeMillis();List<String> fastCollect = list.stream().parallel()//并发处理.filter(s -> s.contains("s")).collect(Collectors.toList());//结束时间long secondEndTime = System.currentTimeMillis();log.info("并发处理计算耗时" + (secondEndTime - secondStartTime));}

在这里插入图片描述


  • 每一次挑战都是成长的契机,勇敢面对,你会变得更强大。
  • 坚持不懈的努力是成功的基石,只要你不放弃,终究会迎来辉煌的时刻。
  • 人生的路上总会有坎坷与挫折,但只要心怀希望,努力前行,总会找到光明的出口。
  • 成功不是偶然的,它是你不断努力、持之以恒的结果,相信自己,你就已经成功了一半。
  • 失败并不可怕,可怕的是放弃追求梦想的勇气,只要坚持不懈,终会收获成功的喜悦。
  • 每一次跌倒都是为了更高的飞跃,不要因为失败而气馁,而是从中吸取经验,继续前行。
  • 拥有梦想是一种幸福,追求梦想是一种勇气,坚持梦想是一种智慧,实现梦想是一种成功。
  • 生活不会向你让步,只有努力奋斗,才能赢得属于自己的辉煌人生。
  • 不要因为困难而放弃,因为坚持过后,成功的喜悦会让你感受到生命的价值。
  • 无论何时何地,都要保持一颗不屈不挠的心,相信自己,你一定能够创造奇迹。

这篇关于Java中学习Lambda表达式和stream中parallel并行方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/880954

相关文章

Java如何从Redis中批量读取数据

《Java如何从Redis中批量读取数据》:本文主要介绍Java如何从Redis中批量读取数据的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一.背景概述二.分析与实现三.发现问题与屡次改进3.1.QPS过高而且波动很大3.2.程序中断,抛异常3.3.内存消

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl