J'ai un List<Object>
et je veux renvoyer la première valeur trouvée vraie qui correspond à un prédicat.
J'ai trouvé que je pouvais utiliser CollectionUtils.find(collection,predicate)
(Apache commons). En supposant que la variable Object
contient une variable entière appelée: value
, comment puis-je spécifier dans le prédicat que la valeur peut être 1,2,3,4,5
et ignorer celles qui ne correspondent Est-il possible de faire "contient".
De plus, n'utilisant pas Java 8, je suis donc incapable de diffuser du contenu.
Pour retourner le premier élément de la liste qui correspond au prédicat donné:
MyObject res = CollectionUtils.find(myList, new Predicate<MyObject>() {
@Override
public boolean evaluate(MyObject o) {
return o.getValue() >= 1 && o.getValue() <= 5;
}
});
Pour filtrer la liste afin qu'elle ne contienne que des éléments correspondant au prédicat:
CollectionUtils.filter(myList, new Predicate<MyObject>() {
@Override
public boolean evaluate(MyObject o) {
return o.getValue() >= 1 && o.getValue() <= 5;
}
});
Vous pouvez remarquer que le Predicate<MyObject>
est le même.
En Java 8, vous pouvez écrire
Optional<Integer> found = list.stream().filter(i -> i >= 1 && i <= 5).findAny();
Avant Java 7, la solution la plus simple consiste à utiliser une boucle.
Integer found = null;
for(integer i : list)
if (i >= 1 && i <= 5) {
found = i;
break;
}
Ce serait le moyen le plus propre et le plus rapide car Java 7 ne prend pas en charge les lambdas.
Vous pouvez utiliser Collections.removeIf (je suppose que vous utilisez JDK 8). Vous pouvez également utiliser un flux:
list = list.stream().filter(predicate).collect(Collectors.toList());
En utilisant Apach Commons Collections, vous pouvez utiliser CollectionUtils.filter .