2016-03-15 9 views
5

Ich versuche eine ConcurrentHashMap<String, LinkedList<String>> von der Größe der LinkedList<String> zu filtern.Filter ConcurrentHashMap nach Wert

Mit anderen Worten, ich möchte Elemente in ConcurrentHashMap herausfiltern, wo die Größe LinkedList<String> größer als 4 ist. Wie würde ich es durch Java 8 getan?

+0

was meinst du mit ‚Filter‘? Was sind Ihre Filterkriterien? Bitte fügen Sie weitere Informationen hinzu –

Antwort

11

Wenn Sie eine ConcurrentMap haben, können Sie einfach einen Strom seiner Einträge erstellen, durch den Aufruf entrySet() und dann stream() und die Einträge halten, wenn der Wert eine Länge von mehr als 4 hat durch eine filter Anwendung. Schließlich können Sie das wieder in eine ConcurrentMap mit dem eingebauten Collectors.toConcurrentMap sammeln.

ConcurrentMap<String, LinkedList<String>> map = new ConcurrentHashMap<>(); 

ConcurrentMap<String, LinkedList<String>> result = 
    map.entrySet() 
     .stream() 
     .filter(e -> e.getValue().size() > 4) 
     .collect(Collectors.toConcurrentMap(Map.Entry::getKey, Map.Entry::getValue)); 

Alternativ könnten Sie es an Ort und Stelle tun, indem Sie die Karte mit

Modifizieren
map.values().removeIf(l -> l.size() <= 4); 
+0

Vielen Dank, das funktioniert. Eine kleine Korrektur - 'Map > map = new ConcurrentHashMap <>();' sonst Compiler sagt 'getKey' und' getValue' kann nicht aufgelöst werden –