/ / Как работи Stream.peek в Java 8? [дубликат] - java, java-stream

Как работи Stream.peek в Java 8? [дубликат] - java, java-stream

От Java 8 API: peek (действие на потребителите)

Връща поток, състоящ се от елементите на този поток, като допълнително изпълнява предоставеното действие за всеки елемент като елементи, които се консумират от получения поток.

Имам кода с Java 8, който не мога да разбера:

Първата версия:

IntStream in = IntStream.range(3, 8);
in.peek(System.out::print).map(x->x*2);

Предполагам, че този код ще отпечата резултати от картографиране, т.е. 68101214. По някаква причина този код не отпечатва нищо.

Втора версия:

IntStream in = IntStream.range(3, 8);
in.peek(System.out::print).map(x->x*2).boxed().forEach(System.out::print);

Този код отпечатва 3648510612714, т.е. един номер от оригиналния поток, номер след картографиране и така нататък. Каква е логиката?

Отговори:

1 за отговор № 1

Причината за това е, че първият поток всъщност не се изпълнява.

На втория поток, който викате forEach което всъщност причинява изпълнението на потока.

Можеш да се обадиш .count() в края на първия поток и той ще тече.