Tengo un código Java que proporciona objetos de items
. Los limita en función de maxNumber
:
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
Funciona correctamente, pero la pregunta es la siguiente: ¿hay alguna forma de omitir la limitación cuando el maxNumber == 0
?
Sé que podría hacer esto:
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());
}
Pero tal vez hay una mejor manera, ¿se te ocurre algo?
java
java-8
java-stream
randomuser1
fuente
fuente
No, la canalización de flujo no permite omitir realmente ninguna parte de la tubería, por lo que se ve obligado a trabajar con la lógica condicional dentro de los pasos e incluir
limit()
siempre en la tubería, o construir la secuencia en partes que serían un poco más legible (en mi humilde opinión) que el if / else en la preguntaEn un caso simple como aquí, no hace mucha diferencia, pero a menudo se ve que las colecciones de códigos regulares se pasan a través de métodos, se convierten en secuencias y luego se vuelven a las colecciones. En tales casos, podría ser una mejor idea trabajar con secuencias en partes hasta que realmente lo necesite
collect()
.fuente