Quais são as diferenças entre collections e streams?
São interfaces diferentes.
Question
Quais são as diferenças entre collections e streams?
Less Short Answer
Os dois conceitos são fundamentalmente diferentes: uma collection carrega elementos, enquanto uma stream não. A interface Collection define como você adiciona e remove elementos, e como itera sobre eles. Já a interface Stream define como você processa elementos: tipicamente com map, filter e reduce. Ou seja, as duas responsabilidades, gerenciar elementos e processá-los, ficam bem separadas em duas interfaces diferentes.
Por que essa separação importa
Essa separação é muito poderosa porque permite que streams se conectem a qualquer fonte de dados: collections, é claro, mas também strings de caracteres, expressões regulares, arquivos, sistemas de arquivos e sockets de rede. O limite é sua imaginação.
One Last Word
Conectar uma stream a uma fonte de dados customizada não é tão difícil. Você precisa implementar a interface Spliterator, o que não é trivial, mas também não é impossível, e passar esse spliterator para o método de fábrica StreamSupport.stream(). Bacana, não é?