Az egyik leghasznosabb újdonság a Java 8 ban a Stream-ek voltak. Nem összekeverendő a Java I/O streamekkel (FileInputStream, stb).
Egyszerűen fogalmazva a streamek, becsomagolják az adat forrásainkat (List, Array, stb) lehetővé teszik, hogy különböző műveleteket hajtsunk végre az adatokon.
A stream nem tárol adatot, nem egy adatstruktúra és soha nem módosítja az eredeti adat forrást.
A Java 8 egy másik érdekes új funkciója az Optional osztály. Az Optional egy csomagoló osztály, amivel a NullPointerException-ket tudjuk kezelni.