java 8 stream 性能_Java 8 stream API会导致性能下降?

今日考试,其中一道题先用非流式编程写完,稍后为简洁,使用了STREAM流式重构了其中两个地方。在提交代码时,发现阅卷系统反馈STREAM风格的代码比非STREAM的慢了4倍。(阅卷系统反馈非流式的30多毫秒, 流式的120多毫秒)

代码如下:

public intleastBricks2(List> wall) {

Map sumValues =newHashMap<>();intcount =0;for(List awall : wall) {intsum =0;intlength = awall.size();for(intiLoop =0; iLoop < length -1; iLoop++) {

sum += awall.get(iLoop);if(sumValues.get(sum) == null) {

sumValues.put(sum, 1);

} else{

sumValues.put(sum, sumValues.get(sum) + 1);

}}

}for(Map.Entry entry : sumValues.entrySet()) {

count = entry.getValue() > count ? entry.getValue() : count;

}returnwall.size() - count;

}public intleastBricks1(List> wall) {

Map sumValues =newHashMap<>();for(List aWall : wall) {intsum =0;intlength = aWall.size();for(intiLoop =0; iLoop < length -1; iLoop++) {

sum += aWall.get(iLoop);sumValues.compute(sum, (key, value) -> value == null? 1 : value + 1);}

}intcount = sumValues.entrySet().stream().mapToInt(Map.Entry::getValue).max().orElse(0);returnwall.size() - count;

}

使用以下数组测试:

1,2,2,1

3,1,2

1,3,2

2,4

3,1,2

1,3,1,1

测试发现:

1 非流式运行时长0毫秒。 流式运行50毫秒。

2 把compute或max这两处修改的一处屏蔽掉,运行时长依然是50毫秒。

3 把compute或max这两处修改完全屏蔽掉,运行时长0毫秒。

说明:

1 在最原始、简单的数据处理下,流式确实会慢一些。

2 具体慢的点可能是某些东西的初始化导致的。(因为屏蔽掉一处运行时长不变, 后在流式处理的前后打时间戳,证明猜想正确。又wall对象和一个完全新建的MAP对象使用相等stream操作,耗时0毫秒。 猜想这个加载耗时可能是类初始化。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值