J'utilise cette méthode:
listRows.stream().forEach(auditRow -> { if(auditRow.actionStr.equals(filter))return true;} else return false;);
et je veux pouvoir la modifier à l'aide de Stream, j'ai essayé ce qui suit, mais il me manque quelque chose:
XXX
mais j'obtiens une erreur.
3 Réponses :
Vous pouvez le faire comme ceci,
listRows.stream().allMatch(row -> row.nameStr.contains(filter));
Mettre à jour
Selon la suggestion de Holgers, cela peut être simplifié comme ceci.
/ p>
listRows.stream().allMatch(row -> row.nameStr.equals(filter) && row.nameStr.contains(filter));
L'utilisation de est égal à
ou contient
peut varier en fonction de votre contexte.
Je pense en même temps que j'ai mis à jour la réponse. Merci !
@nullpointer qui pourrait être une transformation de code correcte, mais qui révèle simplement une erreur logique dans la condition de l'OP. equals (filter)
implique contains (filter)
, donc si toutes les chaînes doivent être égales, il est inutile de tester également contains (filter)
.
Dans ce cas, nous pouvons simplement nous passer de && row.nameStr.contains (filter)
Dépend de l'intention réelle. Peut-être que la logique voulue est contient (filtre)
, auquel cas equals (filtre)
devrait être supprimé. Dans les deux cas, tester les deux n'a aucun sens (cela s'appliquerait également à la combinaison via ||
).
J'utiliserais un filtre de flux pour filtrer tous les éléments qui sont vrais et faire un compte sur le résultat.
boolean result = (listRows.stream().filter(row -> row.nameStr.equals(filter) && row.nameStr.contains(filter)).count() == 0);
mais ce n'est pas le but que je veux vérifier tous les éléments de la liste et vérifier s'ils respectent la condition et si c'est le cas, ils seront retournés.
Se débarrasser de toutes les négations en utilisant la loi de de-morgan de telle sorte que
return listRows.stream().allMatch(row -> row.nameStr.contains(filter));
vous pouvez utiliser allMatch
comme:
return listRows.stream() .noneMatch(row -> (!row.nameStr.equals(filter) || !row.nameStr.contains(filter)));
Pourquoi utiliser un
stream
si vous remplacez simplement une boucle par unforEach
? voir aussi: blog.jooq.org/2015/12/08/...