Akışları kullanarak bir listeyi diğerine eşlemeye çalışıyorum. Orijinal listenin bazı öğeleri eşlenememektedir. Yani, haritalama işlevi uygun yeni bir değer bulamayabilir.Java8 akış haritası - tüm harita işlemlerinin başarılı olup olmadığını kontrol edin.
Eşleştirmelerden herhangi birinin başarısız olup olmadığını bilmek istiyorum. İdeal olarak, bir arıza meydana geldiğinde işlemeyi durdurmak isterim.
Ne anda yapıyorum geçerli:
- hiçbir eşlenen değeri
- var ben
filter()
- Sonra dere
- I
collect()
gelen boş değerlere kaldırmak ve eğer eşleme fonksiyonunull
döndürür Sonucun boyutunu orijinal listenin boyutlarıyla karşılaştırır. Örneğin
:
List<String> func(List<String> old, Map<String, String> oldToNew)
{
List<String> holger = old.stream()
.map(oldToNew::get)
.filter(Objects::nonNull)
.collect(Collectors.toList);
if (holger.size() < old.size()) {
// ... appropriate error handling code ...
}
else {
return holger;
}
}
Bu çok şık değil. Ayrıca, her şey başarısız olduğunda bile her şey işlenir.
Bunu yapmanın daha iyi bir yolu için öneriler? Ya da akıntıları tamamen terk etmeliyim ve eski eski döngüler kullanmalıyım?
Neden null değerine sahipse, eski & null :: get' öğesinden denetlenmeyen bir istisnayı atıp dışarıda yakalamıyorsunuz? – Tunaki
@Tunaki Teşekkürler, bu bir seçenek. Bunun zerafeti veya performansı geliştirip geliştirmeyeceğini bilmiyorum (istisnalar pahalı olduğu için). – daphshez
"Yeni" değişkeninizi adlandırmayın. Bu işe yaramaz ... Ve demek istediği "void List" bir dönüş türü nedir? –
Holger