Stream.concat与Stream中的新ArrayList性能

在代码审查期间,我建议对JDK8 +流进行代码改进。 原始代码看起来非常相似,如下所示:

List<Element> result = content.getFancyStuffs().stream()
  .flatMap(item -> {
      
        List<Element> objects = new ArrayList<>();
        objects.add(item.getElement());
        objects.addAll(item.getElements());
        return objects.stream();
      })
  .collect(toList());

这里有更多细节。 的get花式的东西s()返回列表花式的东西元素。 的花式的东西类包含两个吸气剂,其中get元件()返回一个元件而get元件s()返回(猜猜是什么?)列表元件的。

有趣的是,lambda创建了一个新的数组列表并添加一个元素objects。add(item。getElement())第二部分通过添加一些元素objects。addAll(item。getElements)。

基于更好的可读性,我的建议是改为使用以下代码:

List<Element> result = content.getFancyStuffs()
  .stream()
  .flatMap(fs -> Stream.concat(Stream.of(fs.getElement()), fs.getElements().stream()))
  .collect(Collectors.toList());

到现在为止还挺好。 但是一段时间之后,我开始考虑这两种解决方案。 我问自己:哪一个更快? 哪一个使用更多的内存? (开发人员通常会问的问题?不是吗?)。

那么您会猜哪一个是更快的解决方案? 第一个还是第二个? 我的猜测是,第一个解决方案将获胜,但要基于一些假设。 这意味着要通过的元素数量content.getFancyStuffs()。stream()..或多或少(小于20),并且返回的元素数量由item.getElements()也相当小(小于20)。

The only thing which can help here to get a reliable answer is to measure it. No assumptions, no educat

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值