In Java 8, ist es eine Möglichkeit, den Filter auf einem Strom auf der Grundlage einer Bedingung anzuwenden,Java 8 Anwenden von Stromfilter auf der Grundlage einer Bedingung
Beispiel
ich diesen Strom haben
if (isAccessDisplayEnabled) {
src = (List <Source>) sourceMeta.getAllSources.parallelStream()
.filter(k - > isAccessDisplayEnabled((Source) k))
.filter(k - > containsAll((Source) k, substrings, searchString))
.collect(Collectors.toList());
} else {
src = (List <Source>) sourceMeta.getAllSources.parallelStream()
.filter(k - > containsAll((Source) k, substrings, searchString))
.collect(Collectors.toList());
}
ich füge den Filter
.filter (k -> isAccessDisplayEnabled ((Quelle) k)))
im Stream basierend auf der if-else-Bedingung. Gibt es eine Möglichkeit, dies zu vermeiden, wenn es sonst noch mehr Filter gibt, dann wird es schwer zu pflegen sein.
Bitte lassen Sie mich wissen
Ich bin nicht in der Lage, diese Zeile zu verstehen, isAccessDisplayEnabled? s -> true: s -> isAccessDisplayEnabled (s), bitte erklären Sie ein bisschen mehr oder zu einem Blog, der es erklärt. – Umar
Versuchen Sie, es als 'isAccessDisplayEnabled zu lesen? (s -> true): (s -> isAccessDisplayEnabled (s)) '. Wenn 'isAccessDisplayEnabled'' true' ist, benutze den Lambda-Ausdruck 's -> true', was im Prinzip so aussieht, als ob du keinen Filter hast, andernfalls benutze' s -> isAccessDisplayEnabled (s) '. Es ist eine Kombination des [ternary operator] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html) mit zwei alternativen [Lambda-Ausdrücken] (http://docs.oracle.com/ javase/tutorial/java/java00/lambdaeexpressions.html). – Holger
@Holder: ok für ternary aber Ordnung ist falsch, nein? Ich denke, wenn Sie eine boolean isAccessDisplayEnabled haben, dann möchten Sie filtern, andernfalls wenn Sie nicht filtern. 'isAccessDisplayEnabled? (s -> isAccessDisplayEnabled (s)): (s -> true) ' – sandwood