我有一个水果清单:
final List<Fruit> fruitList = Arrays.asList(new Fruit(1, "AA"), new Fruit(2, "DD"),
new Fruit(3, "CC"), new Fruit(4, "BB"));
和水果谓词
final Predicate<Fruit> predicate = s -> s.getName().equals("AA") && s.getId() == 10;
谓词的输出
System.out.println(fruitList.stream().anyMatch(predicate)); -> output false
当我将谓词与另一个谓词链接时,它将不起作用
final Predicate<Fruit> predicate = s -> s.getName().equals("AA");
predicate.and(s -> s.getId() == 10);
System.out.println(fruitList.stream().anyMatch(predicate)); -> output true
怎么可能?
答案 0 :(得分:2)
来自谓词的doc:
和(谓词<?super T>其他)
返回一个组成谓词, 表示此谓词的短路逻辑与 另一个。
结果谓词被返回,并且没有通过引用进行修改,因此您需要对其进行分配,如@Zircon在评论(predicate = predicate.and(...)
中所述)。