Java8的Stream究竟是什么?

Neo*_*Neo 8 java java-8 java-stream

我已经阅读了Java 8 In Action,因此我知道什么是Stream以及如何使用它.但从计算机科学的角度来看,所有数据都需要存储在一种数据结构中.所以,

  1. 如何存储Stream?

  2. Stream如何能够为如此多种集合(例如,数组,链表,映射)执行如此多的操作?

  3. 或者Stream可能只是一个接口,需要各种集合来实现此接口中指定的这些操作?

谢谢!

EdH*_*EdH 5

与Collection相比,Stream的一个重要区别是Stream应该被懒惰地评估.摘自JavaDoc的摘录

溪流很懒; 仅在启动终端操作时执行对源数据的计算,并且仅在需要时消耗源元素.

将实例设为Stream并不能保证该流的所有元素都是已知的.Stream的元素仅在需要时计算.这反映了其他功能语言(如Haskell或Scala)中的功能.您将使用Stream来模拟无限列表.例如,可以计算斐波纳契数列的流.它只会计算所请求的元素.它不会计算所有元素,因为它永远不会完成.

因此,假设您始终可以存储Stream的内容是不正确的.如果Stream是一个有限列表,只能识别其值,您只能存储Stream的内容.那时,没有理由在传统的Collection上使用Stream.