functionalinterface - stream java 8
¿El JDK proporciona un consumidor ficticio? (1)
Tengo una necesidad en un bloque de código para consumir ''n'' elementos de una secuencia y luego terminar, en esencia:
public static <T> void eat(Stream<T> stream, int n)
// consume n items of the stream (and throw them away)
}
En mi situación, no puedo cambiar la firma para devolver Stream<T>
y simplemente return stream.skip(n)
; Tengo que eliminar algunos elementos de la transmisión (no es lógica simple) para estar listo para un consumidor que no necesita saber cómo, o incluso eso, esto ha sucedido.
La forma más sencilla de hacer esto es usar limit(n)
, pero tengo que llamar a un método de terminación de flujo para activar el flujo, así que en esencia tengo:
public static <T> void skip(Stream<T> stream, int n) {
stream.limit(n).forEach(t -> {});
}
Nota: Este código es una simplificación bruta en exceso del código real y es solo para fines ilustrativos. En realidad, el límite no funcionará porque hay lógica en torno a qué / cómo consumir elementos. Piense en ello como consumir elementos de "cabecera" de un flujo, y luego hacer que un consumidor consuma los elementos "cuerpo".
Esta pregunta es sobre el lambda t -> {}
no hacer nada" t -> {}
.
¿Hay un consumidor de "no hacer nada" en algún lugar del JDK, como la función Function.identity()
"no hacer nada"?
No, JDK no proporciona un consumidor ficticio, así como otras funciones predefinidas como un predicador ejecutable, un predicado siempre verdadero o un proveedor que siempre devuelve cero. Simplemente escriba t -> {}
, de todos modos es más corto que llamar a cualquier método listo posible que haga lo mismo.