博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java8 Lambda表达式和流操作如何让你的代码变慢5倍
阅读量:5878 次
发布时间:2019-06-19

本文共 1321 字,大约阅读时间需要 4 分钟。

转:http://www.importnew.com/17262.html

有许许多多关于 Java 8 中流效率的讨论,但根据 Alex Zhitnitsky 的测试结果显示:坚持使用传统的 Java 编程风格——iterator 和 for-each 循环——比 Java 8 的实现性能更佳。

 

开始使用 Java 8 的第一件事情是在实践中使用 lambda 表达式和流。但是请记住:它确实非常好,好到可能会让你上瘾!但是,我们也看到了,使用传统迭代器和 for-each 循环的 Java 编程风格比 Java 8 中的新方式性能高很多。

当然,这也不是绝对的。但这确实是一个相当常见的例子,它显示可能会有大约 5 倍的性能差距。如果这影响到系统的核心功能或成为系统一个新的瓶颈,那就相当可怕了。

 

例子:

我们先创建了一个 ArrayList,并插入一个 100000 个随机整数,并通过 7 种不同的方式遍历所有的值来查找最大值

lambda比foreach效率慢5倍

使用迭代器遍历列表:

public int iteratorMaxInteger() {    int max = Integer.MIN_VALUE;    for (Iterator it = integers.iterator(); it.hasNext(); ) {        max = Integer.max(max, it.next());    }    return max;}

使用 For-Each 循环遍历列表:

public int forEachLoopMaxInteger() {    int max = Integer.MIN_VALUE;    for (Integer n : integers) {        max = Integer.max(max, n);    }    return max;}

 使用简单的for循环:

public int forMaxInteger() {    int max = Integer.MIN_VALUE;    for (int i = 0; i < size; i++) {        max = Integer.max(max, integers.get(i));    }    return max;}

 使用java8并行流:

public int parallelStreamMaxInteger() {    Optional max = integers.parallelStream().reduce(Integer::max);    return max.get();}

 使用 lambda 表达式及流:

public int lambdaMaxInteger() {    return integers.stream().reduce(Integer.MIN_VALUE, (a, b) -> Integer.max(a, b));}

 

转载于:https://www.cnblogs.com/wzk-0000/p/10845172.html

你可能感兴趣的文章
Web API总结
查看>>
jquery.min.js v1.10.3版本autocomplete方法会在text前添加搜索出多少项的文本信息 要去除...
查看>>
数据结构堆排序
查看>>
Mysql怎么判断繁忙 checkpoint机制 innodb的主要参数
查看>>
MyGeneration学习笔记(11) :dOOdad的架构(Architectures)
查看>>
数据库模块41题作业
查看>>
《携程的技术演进之路》读后感
查看>>
IE8正式版引发VS2005和VS2008添加变量向导出错的解决方案
查看>>
[BZOJ 2243][SDOI2011] 染色
查看>>
Visual Studio 2010中文旗舰版+大家所关心的
查看>>
LeetCode-78-Subset
查看>>
libtiff.so.3
查看>>
人生感悟
查看>>
CSS transitions深入理解
查看>>
KDTree 板子
查看>>
.NET深入解析LINQ框架2
查看>>
股票新闻速递 隐私声明
查看>>
获取synchronized锁中的阻塞队列中的线程是非公平的
查看>>
在浏览器中输入Google.com并且按下回车之后发生了什么?[转]
查看>>
js刷新页面方法
查看>>