Bir akış nasıl tembel yaratılabilir? koleksiyon bazlı kod geçişi sırasında bu kalıbı içine birden fazla kez çalıştırmak: bildiğimiz gibiStream lazily oluştur
Collection collection = veryExpensiveCollectionCreation();
return Stream.concat(firstStream, collection.stream());
çıkan birleştirilmiş akışı tipik lazily işlenir. Bu nedenle, akış işlemesi, birleştirilen akışın birinci bölümünde durursa, pahalı koleksiyona hiç gerek yoktur.
Performans nedenleriyle, birleştirilmiş derleme aslında birleştirme işleminin ikinci bölümünün öğelerini yinelemeye çalışana kadar tüm koleksiyonun oluşturulmasını ertelemek istiyorum.
sözde kod
return Stream.concat(firstStream, new LazyStreamProvider() {
Stream<Something> createStream() {
return veryExpensiveCollectionCreation().stream();
}
);
Edit gibi görünecektir: Ben akışlarına toplama oluşturma API tüm farkında akışı yapmak, iyi olurdu üstlenmeden farkındayım. Bununla birlikte, bu, bu durumda değiştirilemez bir API'ye sahip başka bir bileşenin parçasıdır.
Eğer veryExpensiveCollectionCreation ('gövdesini değiştirebilir)' ya da sadece bir dönüş için aşırı 'Stream'? – Mena
Can 'veryExpensiveCollectionCreation()' katı bir koleksiyon yerine tembel bir akışı döndürmek için değiştirilebilir mi? – puhlen