java Stream 和 parallelStream比较

java Stream 和 parallelStream比较java8 有一个新的特性就是流 其中 stream 和 parallelStre 就是一种流的处理方式 前者是单管 后者是多管道 在性能上做一个对比看看两者的差别 首先写一个方法 用来生成一个大小为 60000 的 list publicstatic lt Integer gt buildIntRang List lt Integer gt numbers

java 8 有一个新的特性就是流,其中stream和parallelStream就是一种流的处理方式,前者是单管,后者是多管道,在性能上做一个对比看看两者的差别。

首先写一个方法,用来生成一个大小为60000的list:

 public static List 
   
   buildIntRange() { List 
   
     numbers = 
    new ArrayList<>( 
    5); 
    for ( 
    int i = 
    0; i < 
    60000; i++) numbers.add(i); 
    return Collections.unmodifiableList(numbers); } 
    
  

用传统的for循环和stream以及parallelStream对上面产生的list进行遍历,用两种不同的方式进行处理:

一:每次sleep 1毫秒,用来模拟每次循环耗时

public static void main(String[] args) { List 
  
    source = buildIntRange() 
   ; // 传统方式的遍历 long start = System 
   .currentTimeMillis() 
   ; for (int i = 
   0 
   ; i < source.size(); i++) { 
     try { TimeUnit 
   .MILLISECONDS 
   .sleep( 
   1) 
   ; } catch (InterruptedException e) { e 
   .printStackTrace() 
   ; } } System 
   .out 
   .println( 
   "传统方式 : " + (System 
   .currentTimeMillis() - start) + 
   "ms") 
   ; // 单管道stream start = System 
   .currentTimeMillis() 
   ; source 
   .stream() 
   .forEach(r -> { try { TimeUnit 
   .MILLISECONDS 
   .sleep( 
   1) 
   ; } catch (Exception e) { e 
   .printStackTrace() 
   ; } }) 
   ; System 
   .out 
   .println( 
   "stream : " + (System 
   .currentTimeMillis() - start) + 
   "ms") 
   ; // 多管道parallelStream start = System 
   .currentTimeMillis() 
   ; source 
   .parallelStream() 
   .forEach(r -> { try { TimeUnit 
   .MILLISECONDS 
   .sleep( 
   1) 
   ; } catch (Exception e) { e 
   .printStackTrace() 
   ; } }) 
   ; System 
   .out 
   .println( 
   "parallelStream : " + (System 
   .currentTimeMillis() - start) + 
   "ms") 
   ; } 
  

二:直接将每次循环得到的值写入text文件

写入文件的方法:

public static void write(String source,String path) { BufferedWriter output = null; try { File file = new File(path); output = new BufferedWriter(new FileWriter(file,true)); //true表示是否追加 output.write(source); } catch (IOException e) { e.printStackTrace(); } finally { if (output != null) try { output.close(); } catch (IOException e) { e.printStackTrace(); } } }

处理list的方法:

 public static void main(String[] args) { List 
  
    source = buildIntRange() 
   ; // 传统方式的遍历 long start = System 
   .currentTimeMillis() 
   ; for (int i = 
   0 
   ; i < source.size(); i++) { 
     write(source 
   .get(i)+ 
   ";", 
   "D://example1.txt") 
   ; } System 
   .out 
   .println( 
   "传统方式 : " + (System 
   .currentTimeMillis() - start) + 
   "ms") 
   ; // 单管道stream start = System 
   .currentTimeMillis() 
   ; source 
   .stream() 
   .forEach(r -> { write(r+ 
   ";", 
   "D://example2.txt") 
   ; }) 
   ; System 
   .out 
   .println( 
   "stream : " + (System 
   .currentTimeMillis() - start) + 
   "ms") 
   ; // 多管道parallelStream start = System 
   .currentTimeMillis() 
   ; source 
   .parallelStream() 
   .forEach(r -> { write(r+ 
   ";", 
   "D://example3.txt") 
   ; }) 
   ; System 
   .out 
   .println( 
   "parallelStream : " + (System 
   .currentTimeMillis() - start) + 
   "ms") 
   ; } 
  

由此可见,传统方式跟单管道stream的处理效率相差无几,多管道parallelStream的处理效率最高。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/211602.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午10:03
下一篇 2026年3月18日 下午10:03


相关推荐

  • 硬链接和符号链接详解

    硬链接和符号链接详解文件属性软硬连接 链接有两种 一种被称为硬链接 HardLink 另一种被称为符号链接 SymbolicLink 建立硬链接时 链接文件和被链接文件必须位于同一个文件系统中 并且不能建立指向目录的硬链接 而对符号链接 则不存在这个问题 默认情况下 ln 产生硬链接 在硬链接的情况下 参数中的 目标 被链接至 链接名 如果 链接名 是一个目录名 系统将在该目录之下建立一个或多个与 目

    2026年3月16日
    3
  • GFS – The Google File System

    GFS – The Google File SystemTheGoogleFileSystemhttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.125.789&amp;rep=rep1&amp;type=pdfhttp://www.dbthink.com/?p=501,中文翻译 Google牛人云集的地方,但在设计系统时,却非常务实,没有采用什么复杂和时髦…

    2022年6月1日
    31
  • php curl拓展,php curl扩展的使用

    php curl拓展,php curl扩展的使用1 cURL 介绍 cURL 是一个利用 URL 语法规定来传输文件和数据的工具 支持很多协议 如 HTTP FTP TELNET 等 最爽的是 PHP 也支持 cURL 库 在这里我主要用来跨域获取数据或者提交数据 2 php 使用 curl 的流程 1 curl init 初始化 2 curl setopt 设置变量 3 curl exec 执行获取返回值 4 curl close 释放 c

    2026年3月26日
    3
  • 系统集成工程师被取消_软考信息系统管理工程师

    系统集成工程师被取消_软考信息系统管理工程师软考中级——系统集成项目管理工程师备考干货第二章:信息系统集成及服务管理。

    2022年10月4日
    4
  • [NLP]Attention机制与self-Attention机制

    [NLP]Attention机制与self-Attention机制作者 张俊林链接 https www zhihu com question answer 来源 知乎著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 nbsp 注意力模型最近几年在深度学习各个领域被广泛使用 无论是图像处理 语音识别还是自然语言处理的各种不同类型的任务中 都很容易遇到注意力模型的身影 所以 了解注意力机制的工作原理对于关

    2025年10月21日
    7
  • springboot 自定义注解(含源码)

    springboot 自定义注解(含源码)spring 注解一般在记录日志 定时器中使用非常方便 在 springmvc 框架广泛应用 可以注解的随处可见 近几年流行的 springboot 框架 更把注解用到了极致 这框架的基本消灭了大部分传统框架上 xml 配制后改为注解代替 既然注解这么使用这么多 那么如何自定义注解呢以下例子以 springboot 中使用自定义注解来简单讲解 源码地址 https gitee com xing xin my

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号