【发布时间】:2018-03-25 17:49:48
【问题描述】:
请不要使用“if”语句,除非您要解释为什么不能没有“if”语句。
我看到了仅在流上我能走多远。我有这个麻烦:
List<Cube> revised =
cubes.filter(p)
.map(c -> f(c))
.map(c -> {
if(c.prop()) {
c.addComment(comment);
}
return c;
})
.collect(Collectors.toList());
我最好的想法是如何在没有“如果”的情况下做到这一点
List<Cube> revised =
cubes.filter(p)
.map(c -> f(c));
revised
.filter(Cube::prop)
.forEach(c -> c.addComment(comment)); // can also map still
有没有办法只在一个链中做到这一点?如果是这样,分支基本上必须在流中发生。像forSome(predicate, lambda) 这样的方法可以工作。
不想“自己动手”任何事情。我可以使用“如果”,但我正在尝试了解功能样式的表现力。
【问题讨论】:
-
Optional.ifPresent 可以接受吗?
-
@VGR 正是我的想法 :)
-
Collectors.partitioningBy 如果您想通过
Cube::prop“开球”您的流,可能会有所帮助 -
这需要拆分和合并流——Java Stream 库不这样做。不过,其他库也支持它。
-
f(c)返回什么?
标签: java java-8 java-stream