gpt4 book ai didi

java - Java11中的谓词过滤所有元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:05 26 4
gpt4 key购买 nike

我正在转向使用 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);

输出是:

leopard, cat, lion

现在我正在尝试使用新方法,但输出不正确。我该如何纠正它?我做错了什么?

我后面的代码:

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);

但这现在输出了我所有的列表。

horse, leopard, cat, dog, lion

最佳答案

What did I do wrong?

您似乎缺少基本的 De-morgan's laws其中指出

!(a || b) == !a && !b

!(a && b) == !a || !b

How do I correct it?

所以您应该更改您的代码以使用

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

关于java - Java11中的谓词过滤所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54059298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com