zoukankan      html  css  js  c++  java
  • Java8 Lambda表达式和流操作如何让你的代码变慢5倍

    转: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));
    }
    
  • 相关阅读:
    十进制转换成二进制列表
    openssl生成RSA格式的公私钥,并转为pkcs8格式
    yum安装报错:Failure when receiving data from the peer
    springboot配置swagger
    Impala配置HA-Nginx
    如何安装windows7
    MySQL数据实时增量同步到Kafka
    ElasticSearch-SQL 安装和使用
    部署nexus服务
    maven发布jar包到nexus
  • 原文地址:https://www.cnblogs.com/wzk-0000/p/10845172.html
Copyright © 2011-2022 走看看