我有一个包含姓名和年龄成员变量的人员类。我有如下 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/