小编Ada*_*-Ur的帖子

在java 8流中使用.peek()

我在我的流中使用了.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()真的仅仅与调试或者我可以以这种方式使用它?
  • 有没有更好的解决方案?
  • 我应该使用第二种解决方案吗?

我正在寻找一个正确的解决方案,而不是一个有效的解决方案,所有这些代码已经在运行.

java java-8 java-stream

11
推荐指数
1
解决办法
3302
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1