提问者:小点点

不是每次[重复]都执行流筛选器方法


public class Test {


  public static void main(String[] args) {

    long filtered = Stream.of("test1", "test2", "test3")
        .filter(getPredicate())
        .count();
    System.out.println(filtered);

  }

  private static Predicate<String> getPredicate() {
    System.out.println("print this");//<-- this line was printed only once
    return item -> item.contains("test");
  }

}

我期望上面的代码3次打印出来打印这个。 但它只印了一次,有人能解释一下吗?


共1个答案

匿名用户

getPredicate()filter()之前调用,因此您只看到一次“print this”。 返回的谓词被调用了三次,如果您想要查看该谓词,请尝试:

private static Predicate<String> getPredicate() {
   System.out.println("print this");
  return item -> {
       System.out.println("print that");
       return item.contains("test");
  };
}