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?
3 Réponses :
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);
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 ());
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);
Voici quelque chose que vous pouvez faire avec Project Reactor:
Flux.from(list).filter(a -> a.getId() > 3).collectList(); //retuns Mono<List<User>>
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 ()) ;
.
Comment avez-vous créé la liste? partager la ligne de code