You have come across a common misconception about Streams. Due to their smooth API, the first instinct that many developers have is that each method applied to a thread will simply return it (similarly, for example, how StringBuilder- acts myStringBuilder.append("Stack").append(" Overflow").append(" is").append(" is awesome!").
, , . Stream, , , , . , , :
Stream<Integer> s = Stream.of(1, 2, 3);
Integer i = s.limit(1).limit(1).findFirst().orElse(null); // returns 1;