我在我的流中使用了.peek(),但它很不满意,遗憾的是我无法找到解决方案.
简化版:
static boolean fooAddTester(int size) {
Foo foo = new foo(); //data structure
return IntStream.range(0, size).
.peek(i -> synchronized(r){foo.add(i)})
.allMatch(e -> foo.isLegal());
}
Run Code Online (Sandbox Code Playgroud)
我需要做的是迭代IntStream并在每次插入后检查foo数据结构是否合法.这在逻辑上等同于:
static boolean fooAddTester(int size) {
Foo foo = new foo(); //data structure
for(int i=0; i<size; i++){
foo.add(i);
if(!foo.isLegal())
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
然而,它更复杂,我正在尝试使用流来简化和学习.
不使用的方法.peek()是这样做:哪个确实有效 - 但我只是将问题"移动"到.allMatch():
return IntStream.range(0, size).
.allMatch(i -> {
synchronized(r){foo.add(i)};
foo.isLegal();
)};
Run Code Online (Sandbox Code Playgroud)
我的问题与这个问题非常相似,不同之处在于我每次都在检查,因此解决方案无效.
所以我的问题是:
.peek()真的仅仅与调试或者我可以以这种方式使用它?我正在寻找一个正确的解决方案,而不是一个有效的解决方案,所有这些代码已经在运行.