Java 8'de bir akışa değişkeni nasıl yayılacağını bilmek akıllıca olur. Bir örnek uzun bir açıklamadan daha iyidir, bu yüzden aşağıdakileri nasıl dönüştürürdünüz? akışlarına kodu:Java'da bir akışta değişkenler nasıl yayılır 8
Map<Integer,A> myMap = new HashMap();
for (Entry<Integer,A> entry : myMap)
{
int param1=entry.getValue().getParam1();
List param2=entry.getValue().getParam2();
for (B b : param2)
{
System.out.println(""+entry.getKey()+"-"+param1+"-"+b.toString());
}
}
bu örnek sorunun bir basitleştirme olduğunu bilerek (örneğin, i "param1" ihtiyaç döngü içinde birden fazla kez sonraki)
Şimdiye kadar sadece bir fikir i Bu tuple üzerinden forEach akış yöntemini en sonunda kullanmak için bir tuple ihtiyacım olan tüm bilgileri saklamak zorunda. (Net olmadığından emin olun ....)
Düzenleme: Örneğimi çok fazla basitleştirdim. Ancak
myMap.entrySet().stream()
.forEach(
e -> IntStream.range(0, e.getValue.getParam2().getSize())
.forEach(
i -> System.out.println(e.getKey()+"-"+e.getValue().getParam1()+"-"+e.getValue.getParam2.get(i))
)
);
i yerine ne var "(e.getValue.getParam2)" benim gerçek de:
Map<Integer,A> myMap = new HashMap();
for (Entry<Integer,A> entry : myMap)
{
int param1=entry.getValue().getParam1();
CustomList param2=entry.getValue().getParam2();
for (int i = 0; i<param2.size(); i++)
{
System.out.println(""+entry.getKey()+"-"+param1+"-"+param2.get(i).toString());
}
}
Ben akışıyla böyle bir şeyi yazabilirsiniz: Davam böyle fazlası mı durum çok daha karmaşık (5-6 yöntemli bir dizi) ve sadece bir değişken almaktan daha ağırdır (bazı mantığı yürütür), bu yüzden e.getValue.getParam2'yi tekrarlamaktan kaçınmak istiyorum (bir kere forEach'ten hemen önce, ve forEach)
Bir kez kullanmanın en iyi kullanım durumunun olmadığını biliyorum. stream, ama bu konuda öğreniyorum ve sınırları hakkında bilmek istiyorum
Teşekkürler! Böyle
Akımları bu akışa dönüştürmeye çalışırken herhangi bir avantaj olmayabilir. – Kayaman