Одним из важных различий с потоком, по сравнению с коллекцией, является то, что Stream предназначен для ленивой оценки. Возьмем выдержку из JavaDoc
Потоки ленивы; вычисление исходных данных выполняется только при инициировании операции терминала, а исходные элементы потребляются только по мере необходимости.
Имея экземпляр, Stream не гарантирует, что все элементы этого потока будут известны. Элементы Stream вычисляются только тогда, когда они требуются. Это отражает функции, которые находятся на других функциональных языках, таких как Haskell или Scala. Вы бы использовали Stream для моделирования бесконечных списков. Например, поток, который может рассчитать последовательность Фибоначчи. Он будет вычислять только те элементы, которые были запрошены. Он не будет вычислять все элементы, поскольку он никогда не завершится.
Итак, предположение, что вы всегда можете сохранить содержимое потока, неверно. Вы только сохранили бы содержимое Stream, если бы это был конечный список, значения которого были идентифицированы. В этот момент нет смысла использовать Stream над традиционной коллекцией.
Помогает ли это: http://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.html? –
@RahulTripathi Мне интересно об использовании Stream – Neo