Pregunta ¿Cómo se realizan las funciones de Stream en un Iterable? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

En Java 8, el Stream clase no tiene ningún método para ajustar un Iterable.

En cambio, estoy obteniendo el Spliterator desde el Iterable y luego obtener una Stream de StreamSupport Me gusta esto:

boolean parallel = true;

StreamSupport.stream(spliterator(), parallel)
                .filter(Row::isEmpty)
                .collect(Collectors.toList())
                .forEach(this::deleteRow);

¿Hay alguna otra forma de generar Stream operaciones en una Iterable que me estoy perdiendo?


32
2017-12-01 08:24


origen


Respuestas:


Mi pregunta similar se marcó como duplicada, pero aquí están los métodos de ayuda que he usado para evitar algunas de las repeticiones:

public static <T> Stream<T> stream(Iterable<T> in) {
    return StreamSupport.stream(in.spliterator(), false);
}

public static <T> Stream<T> parallelStream(Iterable<T> in) {
    return StreamSupport.stream(in.spliterator(), true);
}

36
2018-04-04 18:21



Lo que describes es la forma de obtener un flujo de un Iterable. Es por eso que agregaron el método spliterator () a Iterable. He hecho la misma conversión y no he visto otra manera.

[ACTUALIZAR] Tal vez esto otra respuesta arrojará alguna aclaración sobre el "por qué".


1
2017-12-01 10:38



Sé que esto no responde directamente a su pregunta, pero un número decente de fuentes Iterable como las colecciones ahora tienen un método para obtener el objeto también como una secuencia.

Creo que la fricción con la que te encontrarás con esta pregunta es que Iterable es semánticamente serial, mientras que los Spliterators están destinados a ser utilizados para el procesamiento en paralelo. Probablemente sea una mejor idea implementar un Spliterator para la fuente de datos subyacente en la que esté interesado si no está ya provisto en el JDK porque el solo uso de un envoltorio alrededor de Iterable no le permitirá obtener los beneficios que proporciona la API de Stream. (como el procesamiento paralelo).


1
2018-03-27 00:02