gpt4 book ai didi

java - List.removeIf() 的谓词行为

转载 作者:行者123 更新时间:2023-12-01 20:26:23 26 4
gpt4 key购买 nike

我有一个包含姓名和年龄成员变量的人员类。我有如下 2 个谓词方法。

    static Predicate<Person> isAbove20(){
return p -> p.getAge() > 20;
}

static Predicate<Person> isNameEqualTo(String name){
return p -> p.getName().equals(name);
}

我有一个人员列表和几行代码,如下所示。

    List<Person> people = new ArrayList<>();
people.add(new Person("raj", 20));
people.add(new Person("bini", 15));
people.add(new Person("tom", 25));
people.add(new Person("rock", 12));

print(people);
people.removeIf(Predicates.isNameEqualTo("rock").and(Predicates.isAbove20()));
System.out.println("**** after applying predicates ****");
print(people);

运行此代码时,我得到的输出为

Person{name='raj', age=20}
Person{name='bini', age=15}
Person{name='tom', age=25}
Person{name='rock', age=12}
**** after applying predicates ****
Person{name='raj', age=20}
Person{name='bini', age=15}
Person{name='tom', age=25}
Person{name='rock', age=12}

我期望它从列表中删除 2 个 Person 对象。 rock(名称为“rock”)和tom(年龄超过20岁))将列表内容打印为

Person{name='raj', age=20}
Person{name='bini', age=15}

有人可以解释一下为什么它在创建时打印整个列表。

谢谢。

最佳答案

您将“和”与“或”混淆了。如果某个人的名字是 rock 年龄 > 20,则您的谓词会删除此人。

没有人匹配此谓词。

关于java - List.removeIf() 的谓词行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43846779/

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