Tengo un java
código que proporciona objetos de items
. Limita basa ellos en la MAXNUMBER:
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
Funciona correctamente, pero la pregunta es - ¿hay una manera de saltarse la limitación cuando el MAXNUMBER == 0? Sé que podría hacer:
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, hace nada vienen a la mente? ¡Gracias!
Supongo que
.limit(maxNumber == 0 ? Long.MAX_VALUE : maxNumber)
hará el truco, ya que es muy probable que no se va a hacer frente a una corriente con más de 2 ^ 63-1 elementos ...
Por lo menos tener cuidado con las corrientes paralelas sobre esto ... Una nota en la documentación de la API dice:
API Nota : Si bien
limit()
es generalmente una operación barata en las tuberías de flujo secuenciales, que puede ser bastante caro en tuberías paralelas ordenados, especialmente para valores grandes de maxSize ...