lambda和Stream真的高效吗

本文探讨了在Java开发中,Java8的Lambda表达式与传统迭代器在性能上的差异。通过示例代码展示,指出Lambda虽然简洁但可能产生过多迭代和中间结果,导致内存消耗。相比之下,迭代器方式可以减少迭代次数和中间结果,提高效率。结论是选择使用哪种方式应根据具体业务需求来判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在我们开发过程中经常会使用到JAVA8的新特性,但是在任何场景下 lambda 表达式一定高效吗

废话不多说直接上代码了举例子

private static void  baduseLambda(){


        List<String> names =Arrays.asList("anna","Ocean","abc")

            //求以"a"开头最长的字符串的数值
      

        // Lambda实现
       int longestNameSize=
             name.Stream().filter(s -> s.startsWith("a"))
             .mapToInt(String::length)
             .max()
             .getAsInt();

        //普通迭代器实现方法
        int longest=0;
        for(String str :names){
            if(str.startsWith("a")){
             int len=str.length() 
              longest =Math.max(len.longest);  
            }
        }
        System.out.println(longest);


}

很显然,第一种方式使用java8 中的StreamAPI 的方式看起来简单直观,但是也有两个明显的弊端:

1.迭代的次数非常多,迭代的次数与表达式中调用函数的次数是相等的,我们可以看到第一种中像filter()、maToint()这样的函数都是一个迭代的过程 

2.迭代的过程会频繁产生中间结果,每一次函数调用都产生一次中间结果,中间结果也是需要保存在JVM内存中的,如果你的List非常的大,这样的消耗也是无法接受的

 

而第二种普通迭代器的方式,只用了一次迭代,将三个操作放在一次迭代之中,减少了迭代次数,也避免了存储中间结果,这就是流水线式操作,效率明显比lammbda和StreamAPI更高

所以在我们编写代码之前要想清楚我们想要的结果是什么,分析一下用原始的方法更好,还是用新的java8API,需要我们自己去根据业务需求来决定使用哪种效率更高

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值