Ich habe Java-Code, der Objekte von bereitstellt items
. Es begrenzt sie basierend auf maxNumber
:
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
Es funktioniert richtig, aber die Frage ist: Gibt es eine Möglichkeit, die Begrenzung zu überspringen, wenn die maxNumber == 0
?
Ich weiß, dass ich das tun kann:
if (maxNumber == 0) {
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.collect(Collectors.toList());
} else {
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
}
Aber vielleicht gibt es einen besseren Weg, fällt Ihnen etwas ein?
quelle
Nein, die Stream-Pipeline erlaubt es nicht, einen Teil der Pipeline tatsächlich zu überspringen, sodass Sie gezwungen sind, entweder mit bedingter Logik innerhalb der Schritte zu arbeiten und die
limit()
immer in der Pipeline zu enthalten, oder den Stream in Teilen zu erstellen, die dies wären etwas besser lesbar (IMHO) als das if / else in der FrageIn einem einfachen Fall wie hier macht es keinen großen Unterschied, aber Sie sehen oft, dass reguläre Codesammlungen Methoden durchlaufen, in Streams konvertiert und dann zurück in Sammlungen. In solchen Fällen ist es möglicherweise besser, mit Streams in Teilen zu arbeiten, bis dies wirklich erforderlich ist
collect()
.quelle