Man*_*ani 8 java predicate functional-interface java-11
我正在使用Java11.学习一种新的方法Predicate.not,我发现我目前的代码只找到猫科:
List<String> animals = List.of("cat", "leopard", "dog", "lion", "horse");
Predicate<String> cats = a -> !a.equals("dog") && !a.equals("horse");
Set<String> filterCat = animals.stream().filter(cats).collect(Collectors.toSet());
System.out.println(filterCat);
Run Code Online (Sandbox Code Playgroud)
输出是:
豹,猫,狮子
现在我正在尝试使用新方法,输出结果不正确.我该如何纠正?我做错了什么?
我后来的代码:
Predicate<String> updatedCatFilter = Predicate.not(a -> a.equals("dog") && a.equals("horse"));
Set<String> catFamily = animals.stream().filter(updatedCatFilter).collect(Collectors.toSet());
System.out.println(filterCat);
Run Code Online (Sandbox Code Playgroud)
但是现在输出我的所有列表.
马,豹,猫,狗,狮子
Nam*_*man 13
我做错了什么?
你似乎缺少基本的德根定律其中规定,
!(a || b) == !a && !b
Run Code Online (Sandbox Code Playgroud)
和
!(a && b) == !a || !b
Run Code Online (Sandbox Code Playgroud)
我该如何纠正?
因此,您应该更改要使用的代码
Predicate.not(a -> a.equals("dog") || a.equals("horse")); // !(a || b)
Run Code Online (Sandbox Code Playgroud)
这应该等同于您现有的代码
Predicate<String> cats = a -> !a.equals("dog") && !a.equals("horse");
Run Code Online (Sandbox Code Playgroud)
也可以看作:
Predicate<String> notDog = a -> !a.equals("dog");
Predicate<String> notHorse = a -> !a.equals("horse");
Predicate<String> cats = notDog.and(notHorse); // !a && !b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |