【发布时间】:2021-04-07 04:48:59
【问题描述】:
我有一个简单的流,如下所示:
List<Long> r = l.stream()
.filter(a->a.getB() % 2 == 0)
.map(A::getB)
.collect(Collectors.toList());
但 Intellij 建议我:
'filter()' 和 'map()' 可以互换 检查信息:报告可以简化的流 API 调用链。它允许在遍历集合时避免创建多余的临时对象。例如
- collection.stream().forEach() → collection.forEach()
- collection.stream().collect(toList/toSet/toCollection()) → 新的 CollectionType(collection)
Intellij给出的例子很容易理解,但我不明白为什么它建议我map().filter()。
我查看了ReferencePipeline 的来源,但没有找到任何线索:map().filter() 或filter().map() 在涉及与流实现相关的临时对象时没有区别(filter().map() 如果A.b 将有更少的自动装箱@是一个让我更困惑的原始人)。
那么,我是否遗漏了一些流实现,或者这是 Intellij 的误报?
【问题讨论】:
标签: java intellij-idea java-stream