¿cómo puedo saltar el .Limite (número) en la corriente cuando el número es igual a 0?

randomuser1:

Tengo un javacó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!

Jean-Baptiste Yunes:

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 ...

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=277166&siteId=1
Recomendado
Clasificación