funcional - stream filter java 7
¿Cuál sería un buen escenario de uso para el Spliterator en Java 8? (3)
Ejemplo de caso de uso: "Convierte iterador a transmisión"
public static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
final Iterable<T> iterable = () -> iterator;
return StreamSupport.stream(iterable.spliterator(), false);
}
¿Cuál sería un buen escenario de uso para la clase Spliterator
en Java 8?
Normalmente, un desarrollador de aplicaciones no consume la API de Spliterator
directamente. Pero si está proporcionando una API e implementando su propia clase similar a una colección, puede implementar Spliterator
para adaptar su colección a la API Stream
. Esto es compatible con un enfoque funcional, procesamiento paralelo y otras características.
Por ejemplo, escribí una utilidad para enumerar direcciones IP en una red, especificada por notación CIDR. No es realmente una colección; es decir, no lleva la lista de todas las direcciones en la memoria a la vez, solo el número de red y la máscara de red. Pero al exponer un Spliterator
, se puede adaptar fácilmente a un Stream
. (Cada Spliterator
solo rastrea la dirección IP actual y la dirección máxima en su parte de la red).
Otro ejemplo del tiempo de ejecución de Java principal es DirectoryStream
para atravesar el sistema de archivos.
Spliterator
es una extensión de la clase de Iterator
atemporal que permite dividir una secuencia de objetos para iterar (la Stream
funciona mediante la recopilación de las operaciones antes de iterar).
No puedo pensar en ninguna ocasión en que el desarrollador promedio tenga que trabajar con Spliterator
. Las API de Collection
y Collections
son increíblemente ricas en Java 8, y en la mayoría de los casos sería mejor usar una subclase de Collection
vainilla en lugar de crear tu propia interfaz de Stream
.
Un ejemplo de cuándo querría usar Spliterator
podría ser una biblioteca para graphs usen una estructura de datos vinculada sobre la cual el Spliterator
/ stream()
estándar no está definido.