¿Cómo puedo omitir la llamada límite (número) con una corriente cuando el número es igual a 0?

randomuser1:

Tengo algo de código Java 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 la siguiente: ¿Hay una manera de saltarse 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, hace nada vienen a la mente?

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://10.200.1.11:23101/article/api/json?id=376319&siteId=1
Recomendado
Clasificación