3
votes

removeIf () méthode. supprime tous les éléments de la liste

J'ai une liste d'utilisateurs, je veux supprimer de ma liste l'utilisateur avec un identifiant En fait, je fais ceci:

[...]
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);
[...]

Je pense que je n'utilisez pas la bonne méthode?


1 commentaires

Comment avez-vous créé la liste? partager la ligne de code


3 Réponses :


8
votes

Utilisez un seul removeIf:

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

EDIT:

En fonction de l'erreur que vous avez postée, vous essayez de supprimer des éléments d'un collection immuable, ce qui n'est pas possible.

Vous pouvez créer une copie de la List d'origine et supprimer des éléments de la copie:

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


3 commentaires

J'ai cette erreur: 2019-01-07 11: 54: 09.931 ERREUR 171920 --- [XNIO-4 task-3] ozproblem.spring.common.AdviceTrait: Non implémenté java.lang.UnsupportedOperationException: null at java.util.Collections $ UnmodifiableCollection.removeIf (Collec‌ tions.java:1084)


@Mercer Vous essayez de supprimer un élément d'une collection non modifiable, c'est pourquoi cela échoue.


ou créez un flux directement à partir de la collection non modifiable et utilisez le filtre . list.stream (). filter (p -> p.getPid ()> = 3) .collect (toList ());



1
votes

Vous ne pouvez appeler la méthode qu'une seule fois:

  • sans variable intermédiaire

    Predicate<Person> predicate = p-> p.getPid() < 3;
    list.removeIf(predicate);
    
  • avec variable intermédiaire

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


0 commentaires

0
votes

Voici quelque chose que vous pouvez faire avec Project Reactor:

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


1 commentaires

ou vous pouvez utiliser quelque chose qui fait déjà partie de la bibliothèque standard list.stream (). filter (p -> p.getPid ()> = 3) .collect (toList ()) ; .