Çevrim API'sini alternatif bir yazım olduğundan daha fazla anlayamadıkça Akış API'sini kullanmamalısınız. Genellikle, kodunuz bir akışta bir forEach
içeriyorsa, kendinize bu görev için gerçekten en iyi çözüm olup olmadığını kendinize sormalısınız, ancak kodunuz bir iç içeforEach
çağrı içeriyorsa, numarasını bilmeniz gerekir. Doğru olan şey değil.
Eşzamanlı bir haritaya eklediğinizde, sorunuzda olduğu gibi işe yarayabilir, ancak Stream API'sinin amacını bozar. obj.getProp()
sonucu tipi ve obj2
tipi diziler olduğunda
Bunun yanı sıra, diziler yorumlarınız dediğin gibi, bir dere inşa etmek Arrays.stream(…)
kullanmak zorunda, böylece bir parallelStream()
yöntemi yoktur. Eğer
Map<String,String> m =
Arrays.stream(obj1.getProp()).parallel()
.flatMap(k1 -> Arrays.stream(obj2).map(k2 -> constructKey(k1, k2)))
.collect(Collectors.toConcurrentMap(key -> key, key -> {
//Hit a DB and get the result
//Computations on the result
//Call some other methods
return result;
}));
bu yararı olarak uygulanabilir yapmak istiyorum ne
Eğer Collectors.toMap
kullansalar bile olmayan bir eşzamanlı yaratarak çalıştığını fakat aynı zamanda, sadece paralel işleme daha iyi bir kullanım olduğunu Collectors.toConcurrentMap
yerine Map
; Çerçeve, onu güvenli bir şekilde üretmeye özen gösterecektir.
Eşzamanlı bir eşzamanlı bir eşleme için mutlaka eşzamanlı bir haritaya ihtiyacınız olmadıkça, aşağıdakilerden birini kullanabilirsiniz; hangisinin daha iyi performans göstereceği, tartışması bu cevabın kapsamını aşacak faktörlere bağlıdır.
Yani Akış API doğru kullanımı ile, ne olursa olsun, güvenli iş parçacığı olacak olan Map
türü üretmek ve kalan soru bankası erişim as already explained in this answer birçok faktör bağlıdır, hangi, iplik güvenli olup olmadığıdır Sorunuza dahil etmediğiniz için, buna cevap veremeyiz.
Özür dilerim. Bu bir liste değil bir dizi – Ashwin
Senin cevabından, list.parallelStream – Ashwin
ile Arrays.stream dönüştürebilirsiniz Evet, 'Arrays.stream (array) .parallel() 'veya' liste kullanıp kullanmadığın önemli değil .parallelStream() ', akış işleminin mantığı aynıdır. Tüm akış işlemi paralel modda çalışacaktır, dolayısıyla iç akış için 'list.stream()' veya 'list.parallelStream()' kullanıp kullanmadığınız önemli değildir. – Holger