栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有流和性能的Java 8嵌套循环

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有流和性能的Java 8嵌套循环

我根据您的代码创建了一个快速而肮脏的微型基准测试。结果是:

循环:3192
拉姆达:3140
拉姆达平行:868

因此,循环和lambda是等效的,并且并行流显着提高了性能。由于您的基准测试方法,我怀疑您的结果不可靠。

public static void main(String[] args) {    int sum = 0;    //warmup    for (int i = 0; i < 100; i++) {        solve();        solveLambda();        solveLambdaParallel();    }    {        long start = System.nanoTime();        for (int i = 0; i < 100; i++) { sum += solve();        }        long end = System.nanoTime();        System.out.println("loop: " + (end - start) / 1_000_000);    }    {        long start = System.nanoTime();        for (int i = 0; i < 100; i++) { sum += solveLambda();        }        long end = System.nanoTime();        System.out.println("lambda: " + (end - start) / 1_000_000);    }    {        long start = System.nanoTime();        for (int i = 0; i < 100; i++) { sum += solveLambdaParallel();        }        long end = System.nanoTime();        System.out.println("lambda parallel : " + (end - start) / 1_000_000);    }    System.out.println(sum);}public static int digitSum(BigInteger x) {    int sum = 0;    for (char c : x.toString().toCharArray()) {        sum += Integer.valueOf(c + "");    }    return sum;}public static int solve() {    int max = 0;    for (int i = 1; i < 100; i++) {        for (int j = 1; j < 100; j++) { max = Math.max(max, digitSum(BigInteger.valueOf(i).pow(j)));        }    }    return max;}public static int solveLambda() {    return  IntStream.range(1, 100) .map(i -> IntStream.range(1, 100).map(j -> digitSum(BigInteger.valueOf(i).pow(j))).max().getAsInt()) .max().getAsInt();}public static int solveLambdaParallel() {    return  IntStream.range(1, 100) .parallel() .map(i -> IntStream.range(1, 100).map(j -> digitSum(BigInteger.valueOf(i).pow(j))).max().getAsInt()) .max().getAsInt();}

我也用jmh运行它,它比手动测试更可靠。结果与上面的结果一致(每个呼叫微秒):

Benchmark          Mode   Mean        Unitsc.a.p.SO21968918.solve        avgt   32367.592   us/opc.a.p.SO21968918.solveLambda  avgt   31423.123   us/opc.a.p.SO21968918.solveLambdaParallel     avgt   8125.600    us/op


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437929.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号