java - Java 8 lambda 链接谓词不起作用
问题描述
我有一份水果清单:
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
怎么可能?
解决方案
来自 Predicate 的文档:
and(谓词<?super T>其他)
返回一个组合谓词,该谓词表示此谓词与另一个谓词的短路逻辑与。
结果谓词被返回并且不被引用修改,因此您需要分配它,正如@Zircon 在注释 ( predicate = predicate.and(...)
) 中所述。
推荐阅读
- javascript - javascript中的Prime Checker函数仅从包含多个素数的数组中返回一个素数
- python - TemplateDoesNotExist at /groups/ .....groups/group_base.html; Template-loader postmortem
- python - selenium browser makes me do captcha multiple times
- python - SyntaxError: EOL while scanning string literal, Does not Create and Write to File
- javascript - Jquery 调用两个 api 并在一个带有两个参数的方法中传递两个响应
- javascript - 在实际加载时停止加载器动画
- data-structures - BitVec 错误地附加了 0 而不是 1
- android - 如何避免android studio中TextView上方的边距?
- c# - 谁能帮我理解c#中的await/async实现
- java - 如何从多个数组中找到最大值