Java removeIf()方法。从列表中删除所有元素
我有一个用户列表,我想从列表中删除id<3的用户 其实我是这样做的:Java removeIf()方法。从列表中删除所有元素,java,predicate,Java,Predicate,我有一个用户列表,我想从列表中删除idp.getPid()==pid1; 谓词personPredicate2=p->p.getPid()==pid2; 谓词personPredicate3=p->p.getPid()==pid3; list.removeIf(personPredicate1); list.removeIf(personPredicate2); list.removeIf(personPredicate3); [...] 我认为我没有使用正确的方法?使用单个移除 list.r
[...]
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);
[...]
[…]
int-pid1=1;
int-pid2=2;
int-pid3=3;
谓词personPredicate1=p->p.getPid()==pid1;
谓词personPredicate2=p->p.getPid()==pid2;
谓词personPredicate3=p->p.getPid()==pid3;
list.removeIf(personPredicate1);
list.removeIf(personPredicate2);
list.removeIf(personPredicate3);
[...]
我认为我没有使用正确的方法?使用单个
移除
list.removeIf(p -> p.getPid() < 3);
您只能调用该方法一次:
- 无中间变量
list.removeIf(p -> p.getPid() < 3);
Predicate<Person> predicate = p-> p.getPid() < 3;
list.removeIf(predicate);
list.removeIf(p->p.getPid()<3);
- 带中间变量
list.removeIf(p -> p.getPid() < 3);
Predicate<Person> predicate = p-> p.getPid() < 3;
list.removeIf(predicate);
谓词=p->p.getPid()<3;
list.removif(谓词);
以下是使用Project Reactor可以做的事情:
Flux.from(list).filter(a -> a.getId() > 3).collectList(); //retuns Mono<List<User>>
Flux.from(list).filter(a->a.getId()>3.collectList()//单声道复述
我有一个错误:2019-01-07 11:54:09.931错误171920---[XNIO-4 task-3]o.z.problem.spring.common.AdviceTrait:未实现java.lang.UnsupportedOperationException:java.util.Collections$UnmodifiableCollection.removeIf(Collections.java:1084)
@Mercer您正试图从不可修改的集合中删除元素,这就是它失败的原因。或者直接从不可修改的集合中创建流,然后使用过滤器
list.stream().filter(p->p.getPid()>=3.collect(toList())代码>您是如何创建列表的?共享代码行,或者您可以使用已经是标准库的一部分的内容list.stream().filter(p->p.getPid()>=3.collect(toList())代码>。