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次打印出来打印这个。 但它只印了一次,有人能解释一下吗?
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");
};
}