метод removeIf (). удаляет все элементы из списка - PullRequest
0 голосов
/ 07 января 2019

У меня есть список пользователей, я хочу удалить из своего списка пользователя с идентификатором <3 </p>

На самом деле я делаю это:

[...]
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 голосов
/ 07 января 2019

Вы можете вызвать метод только один раз:

  • без промежуточной переменной

    list.removeIf(p -> p.getPid() < 3);
    
  • с промежуточной переменной

    Predicate<Person> predicate = p-> p.getPid() < 3;
    list.removeIf(predicate);
    
0 голосов
/ 07 января 2019

Вот что вы можете сделать с помощью Project Reactor:

Flux.from(list).filter(a -> a.getId() > 3).collectList();  //retuns Mono<List<User>>
0 голосов
/ 07 января 2019

Используйте один removeIf:

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

EDIT:

На основании опубликованной вами ошибки вы пытаетесь удалить элементы из неизменяемой коллекции, что невозможно.

Вы можете создать копию оригинала List и удалить элементы из копии:

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