Tad*_*Tad 2 java haskell stream
我正在寻找使用Streams在Java中使用Haskell的"或"函数.
给定无限流时,此版本不会返回:
public static Boolean or(Stream<Boolean> bs) {
return bs.reduce(false, (x, y) -> x || y);
}
Run Code Online (Sandbox Code Playgroud)
此版本无法运行,因为bs流使用了两次:
public static Boolean or(Stream<Boolean> bs) {
Optional<Boolean> b0 = bs.findFirst();
if (b0.isPresent()) {
return b0.get() || or(bs.skip(1));
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我是Java的新手,所以任何提示都会非常感激.谢谢.
只需使用Stream#anyMatch(...)a Predicate返回值本身.
// assuming there are no null values
boolean or = booleans.anyMatch(b -> b); // will only match if value is true
Run Code Online (Sandbox Code Playgroud)
与or您链接的Haskell文档中描述的内容类似,如果Stream是无限的,则无法返回false.Stream如果它看到的只是false值,它将继续消耗它.
这是一种短路操作.它(实际上,它可以,但不必)true在找到true值后立即返回.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |