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();