2 回答
![?](http://img1.sycdn.imooc.com/54584cb50001e5b302200220-100-100.jpg)
TA贡献1851条经验 获得超5个赞
我做错了什么?
您似乎错过了基本的德摩根定律,该定律指出:
!(a || b) == !a && !b
和
!(a && b) == !a || !b
我该如何纠正?
因此,您应该更改代码以使用
Predicate.not(a -> a.equals("dog") || a.equals("horse")); // !(a || b)
它应该等同于您现有的代码
Predicate<String> cats = a -> !a.equals("dog") && !a.equals("horse");
也可以看成是:
Predicate<String> notDog = a -> !a.equals("dog");
Predicate<String> notHorse = a -> !a.equals("horse");
Predicate<String> cats = notDog.and(notHorse); // !a && !b
![?](http://img1.sycdn.imooc.com/545850c80001ebf202200220-100-100.jpg)
TA贡献1875条经验 获得超3个赞
您可以这样写:
List<String> animals = List.of("cat", "leopard", "dog", "lion", "horse");
Set<String> filterCat = animals.stream()
.filter(Predicate.not("dog"::equals).and(Predicate.not("horse"::equals)))
.collect(Collectors.toSet());
System.out.println(filterCat);
添加回答
举报