J'ai du code Java qui fournit des objets items
. Il les limite en fonction maxNumber
:
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
Cela fonctionne correctement, mais la question est la suivante: existe-t-il un moyen de sauter la limite lorsque le maxNumber == 0
?
Je sais que je pourrais faire ça:
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());
}
Mais peut-être y a-t-il une meilleure façon, est-ce que quelque chose vous vient à l'esprit?
la source
Non, le pipeline de flux ne permet pas de fait sauter d' une partie de la canalisation, de sorte que vous êtes obligé de travailler soit avec une logique conditionnelle à l' intérieur des étapes et y compris le
limit()
toujours dans le pipeline ou la construction du flux dans les parties qui seraient un peu plus lisible (à mon humble avis) que si / sinon dans la questionDans un cas simple comme ici, cela ne fait pas beaucoup de différence, mais vous voyez souvent dans les collections de code normales passer par des méthodes, être converties en flux, puis revenir aux collections. Dans de tels cas, il peut être préférable de travailler avec des flux en plusieurs parties jusqu'à ce que vous en ayez vraiment besoin
collect()
.la source