Di perpustakaan pra-Java 8 lambda-berat seperti Guava, output menggunakan antarmuka Java Collection Framework umum sehingga mudah untuk menyebarkannya ke API eksternal / internal dan masih memanfaatkan beberapa perhitungan malas jika metode perpustakaan melakukannya (misalnya malas filter()
dan transform()
).
Namun, di Java 8 Streams, panggilan untuk mendapatkan terminal a Collection
/ Map
is (yaitu bersemangat) dan itu juga akan mengalokasikan struktur data baru untuk menyimpan hasilnya.
Untuk perhitungan yang rumit dengan beberapa tahapan dan pola strategi di tengah, ini menyebabkan banyak alokasi yang tidak perlu karena hasil antara.
Jadi, apakah orang berpikir itu adalah praktik yang baik untuk API internal (yaitu strategi pola strategi) untuk mengambil dan kembali Stream
atau haruskah saya mundur ke malas tetapi tidak dirampingkan (pun intended saya kira) API Guava?
Edit:
Perhatian utama saya Stream
adalah bahwa itu hanya dapat dikonsumsi sekali dan melewati sesuatu seperti Supplier<Stream<X>>
terlihat sangat rumit. Hampir mendorong Anda hanya untuk lulus Collection
dan kemudian kembali stream()
(dan membayar biaya evaluasi bersemangat pada saat itu).