Ada jawaban yang jauh lebih baik daripada menggunakan spliteratorUnknownSize
langsung, yang keduanya lebih mudah dan mendapatkan hasil yang lebih baik. Iterable
memiliki 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 Iterable
sudah 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.