Uso de alimentación StreamSupplier

Nishant Kumar:

Estoy usando siguiente código para reutilizar corriente pero conseguir

java.lang.IllegalStateException: corriente ya ha sido operado o cerrada

Código

public static void main(String[] args) {

    try {
        String[] array = { "a", "b", "c", "d", "e" };
        Stream<String> ss = Stream.of(array);
        Supplier<Stream<String>> streamSupplier = () -> ss;

        long count = streamSupplier.get().count();
        // get new stream
        streamSupplier.get().forEach(x -> System.out.println(x));

        // get another new stream

        System.out.println(count);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Lino:

No asigne Stream.of(array)a una variable intermedia, simplemente volver directamente en el Supplier:

Supplier<Stream<String>> streamSupplier = () -> Stream.of(array);

Eso es porque previamente se acaba de suministrar siempre la misma referencia al llamar supplier.get()pero en realidad quería volver una nueva Stream.

También como se sugirió @Eugene, utilizando Arrays.stream()más Stream.of()se prefiere. A medida que este último es un método varargs, pero sólo los delegados a la primera.


También su enfoque actual se puede simplificar utilizando el Stream.peek()método:

long count = Arrays.stream(array)
    .peek(System.out::println)
    .count();

Supongo que te gusta

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