Java 8 Lambda链接谓词不起作用

时间:2019-08-23 13:20:54

标签: java java-8 predicate

我有一个水果清单:

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

怎么可能?

1 个答案:

答案 0 :(得分:2)

来自谓词的doc

  

和(谓词<?super T>其他)

     

返回一个组成谓词,   表示此谓词的短路逻辑与   另一个。

结果谓词被返回,并且没有通过引用进行修改,因此您需要对其进行分配,如@Zircon在评论(predicate = predicate.and(...)中所述)。