removeIf()方法。从列表中删除所有元素

时间:2019-01-07 10:45:26

标签: java predicate

我有一个用户列表,我想从列表中删除ID为<3的用户

实际上我是这样做的:

[...]
int pid1 = 1;
int pid2 = 2;
int pid3 = 3;
Predicate<Person> personPredicate1 = p-> p.getPid() == pid1;
Predicate<Person> personPredicate2 = p-> p.getPid() == pid2;
Predicate<Person> personPredicate3 = p-> p.getPid() == pid3;
list.removeIf(personPredicate1);
list.removeIf(personPredicate2);
list.removeIf(personPredicate3);
[...]

我认为我使用的方法不正确?

3 个答案:

答案 0 :(得分:8)

使用单个removeIf

list.removeIf(p -> p.getPid() < 3);

编辑:

根据您发布的错误,您试图从不可变集合中删除元素,这是不可能的。

您可以创建原始List的副本,并从副本中删除元素:

List<Person> copy = new ArrayList<>(list);
copy.removeIf(p -> p.getPid() < 3);

答案 1 :(得分:1)

您只能调用该方法一次:

  • 没有中间变量

    list.removeIf(p -> p.getPid() < 3);
    
  • 具有中间变量

    Predicate<Person> predicate = p-> p.getPid() < 3;
    list.removeIf(predicate);
    

答案 2 :(得分:0)

您可以使用Project Reactor执行以下操作:

Flux.from(list).filter(a -> a.getId() > 3).collectList();  //retuns Mono<List<User>>