2016-08-11 7 views
3

私の質問Javaのツリーマップ印刷値の明確化

私は1以下は

は、詳細は上記に基づいて

static Map<Integer, Set<String>> myMap = new TreeMap<>(); 


Key value 
1  a 
     b 
     c 

2  d 

3  e 

4  f 
     g 
     h 

されている値よりも多くを持っているキー印刷するマップ値を印刷中 1と4を印刷したいだけ2と3を省略する必要があります

印刷

myMap.entrySet().forEach((e) -> { 
       System.out.println(e.getKey()); 
       e.getValue().forEach((c) -> { 
        System.out.println(" " + c); 
       }); 
      }); 

答えて

2

例えばfilter

myMap.entrySet().stream().filter(entry -> entry.getValue().size() > 1).forEach... 

、適用することができますか?標準不可欠形式は読み書き込みが簡単かつ容易でもある:

for (Entry<Integer, Set<String>> e : myMap.entrySet()) { 
    if (e.getValue().size() > 1) { 
    System.out.println(e.getKey()); 
    for (String s : e.getValue()) { 
     System.out.println(" " + s); 
    } 
    } 
} 

は確かに、それはさらにいくつかのラインだが、簡潔さは必ずしも美徳ではありません。明快さがあなたの主要な関心事であるべきです。

4

あなたは、このためのストリームを使用している特別な理由があるの

public class Test { 

    public static void main(String[] args) { 
     Map<Integer, Set<String>> myMap = new TreeMap<>(); 
     Set<String> set1 = new HashSet<>(); 
     Set<String> set2 = new HashSet<>(); 
     Set<String> set3 = new HashSet<>(); 

     set1.add("1"); 
     set1.add("2"); 
     set1.add("3"); 

     set2.add("2"); 

     set3.add("1"); 
     set3.add("2"); 

     myMap.put(1, set1);//3 Elements 
     myMap.put(2, set2);//1 Element 
     myMap.put(3, set3);//2 Elements 

     myMap.entrySet().stream() 
      .filter(entry -> entry.getValue() != null) 
      .filter(entry -> entry.getValue().size() > 1) 
      .forEach(System.out::println); 
    } 

} 

出力

1=[1, 2, 3] 
3=[1, 2]