2016-08-11 7 views
3

Meine FrageJava Treemap Druckwert Klärung

, während der Wert der Karte Drucken i mehr hat, die Schlüssel drucken möchten als eine Werte sind

Im Folgenden die Details

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


Key value 
1  a 
     b 
     c 

2  d 

3  e 

4  f 
     g 
     h 

auf der obigen Basis ich möchte nur 1 und 4 drucken wir müssen 2 und 3 weglassen

Drucken

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

Antwort

2

Gibt es einen bestimmten Grund Sie Streams für diese Verwendung? Das Standard-Format zwingend notwendig ist sowohl einfacher zu schreiben und leichter zu lesen:

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); 
    } 
    } 
} 

Zugegeben, es ist ein paar Zeilen, aber Prägnanz ist nicht unbedingt eine Tugend. Klarheit sollte Ihr wichtigstes Anliegen sein.

4

Sie können filter

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

Zum Beispiel gelten,

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); 
    } 

} 

Ausgabe

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