java在中间操作中使用收集的结果可能存在哪些问题?
考虑下面的场景,其中一个中间操作关注先前操作中的哪一个成功。
// isSelected -> method that returns a boolean on whether the current source is selected
List<String> selectedSources = new ArrayList<>();
sources.stream()
.map(source -> Pair.of(source, isSelected(source, selectedSources)))
.filter(pair -> pair.isRight())
.map(pair -> pair.getLeft())
.collect(Collectors.toCollection(() -> selectedSources));
在这个场景中,我们没有真正的功能,我们在中间步骤之一使用终端收集的结果。这是可行的,但违背了java流和函数式编程的一些基本原则。对于这是否是良好做法,或者是否应该避免,是否有任何一般性指导
# 1 楼答案
通常对现有集合使用
.collect
不是一个好做法。通常,你应该收集到一个新的集合中虽然如果仍要修改现有集合(这可能会导致并发问题),但可以使用
.forEach
:由于您正在编写修改现有集合的“没有真正功能的”代码,因此没有理由在这里强制使用
Stream API
方法IMHO、增强的for循环和嵌套的if语句在您的情况下可以做得很好。代码更具可读性: