От 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()
в края на първия поток и той ще тече.