I recently started using Java 8's Stream API and I think it's a great contribution to Java. However, I don't understand why it was implemented the way it was.
One of the other, most wonderful features in Java 8 is default-methods in interfaces, which allow having a default implementation to an interface. Using these, the Collection interface could've been endowed with all the methods offered through the stream API together with default implementations, all while being backwards-compatible. It would've allowed simpler syntax which is more like LINQ in .NET, but also allowing implementing types to override behavior of these methods. It would eliminate the need for calling the stream() method each time, and the need for using the collect() method at all times.
I know this is a very general question but to me it just seems like the developers of Java 8 made a very unfortunate choice which will be very hard to fix.