Ada jawaban yang jauh lebih baik daripada menggunakan spliteratorUnknownSizelangsung, yang keduanya lebih mudah dan mendapatkan hasil yang lebih baik. Iterablememiliki spliterator()metode, jadi Anda harus menggunakannya untuk mendapatkan spliterator Anda. Dalam kasus terburuk, ini adalah kode yang sama (menggunakan implementasi default spliteratorUnknownSize), tetapi dalam kasus yang lebih umum, di mana Anda Iterablesudah menjadi koleksi, Anda akan mendapatkan spliterator yang lebih baik, dan karena itu kinerja streaming yang lebih baik (mungkin bahkan paralelisme yang baik). Itu juga lebih sedikit kode:
StreamSupport.stream(iterable.spliterator(), false)
.filter(...)
.moreStreamOps(...);
Seperti yang Anda lihat, mendapatkan aliran dari Iterable(lihat juga pertanyaan ini ) tidak terlalu menyakitkan.