2017-02-16 3 views
-2

私はMap<String, Map <String, List<ExciseReportDataPoint>>> Dataタイプのデータ構造を持っています。List<ExciseReportDataPoint>のエントリ数を各トップレベルキーで計算したいと思います。ネストされたハッシュマップでコレクションのサイズを取得しますか?

ハッシュマップは論理的にはMap<LiquorCategory, Map<LiquorBrand, List<LiquorBottles>>>と考えることができます。基本的に私は各LiquorCategoryのいくつかの酒瓶を知りたいと思っています。

+1

:(data.entrySet()のMap.Entry <文字列、HashMapの<文字列、リスト<ダブル>>> liquorCategoryEntry)について

問題が発生したかどうか尋ねます。私たちはあなた自身で試みをしないと、あなたのためのコードを書いていません。 –

+0

質問を取り下げるには同意しますか? –

+0

map.get(LiquorCategory).size()? –

答えて

1

あなたが最初のレベルMapを反復する必要があり、次いで第2の上にあなただけの種類を変更する必要があり、すべてのList.size

まずWAY

Map<String, Map <String, List<Double>>> Data = new HashMap<String, Map <String, List<Double>>>(); 
int somme = 0; 
for(String key1 : Data.keySet()){ 
    somme = 0; 
    for(List<Double> value2 : Data.get(key1).values()){ 
     somme += value2.size(); 
    } 
    System.out.println("For "+key1+", there is "+somme+" bottles"); 
} 

それを使用することを計算します(酒との二重の文字列、...)の要素

第二の方法

ここで
Data.keySet().stream().forEach(key1 -> { 
      System.out.println("For " + key1 + ", there is " 
        + Data.get(key1).values().stream().mapToInt(list -> list.size()).sum() + " bottles"); 
     }); 

あなたは彼らが使用されていない、種類についての世話をする必要はありません、それは3行で同じことを ストリームは...

反復処理し、フィルタ、合計は、カウントするように代替されています
0

私は次のコードをいくつかの回答に基づいて提案しました。これは私のために働いています。コードは次のようになります。

for (Map.Entry<String, Map<String, List<ExciseReportDataPoint>>> entry1 : rData.entrySet()) { 
    int liquorBottle = 0; 
    for(List<ExciseReportDataPoint> value2 : rData.get(entry1.getKey()).values()){ 
     liquorBottle += value2.size(); 
    } 
} 
0

地図<文字列、地図<文字列、リスト<ダブル>>>データ=新しいHashMapの<文字列、地図<文字列、ArrayListの<ダブルを>>>();あなたがコードを自分で試みることが期待されている{

String category = liquorCategoryEntry.getKey(); 

int liquorBottle = 0; 
for (Map.Entry<String, List<Double>> liquorBrandEntry : liquorCategoryEntry.getValue().entrySet()) { 
    String brandName = liquorBrandEntry.getKey(); 
    liquorBottle += liquorBrandEntry.getValue().size(); 
    // ... 
} 

}

関連する問題