2016-03-15 10 views
5

LinkedList<String>のサイズでConcurrentHashMap<String, LinkedList<String>>をフィルタリングしようとしています。フィルタConcurrentHashMap値で

つまり、LinkedList<String>のサイズがConcurrentHashMapの要素を除外したいと思っています。Java 8でどのように処理するのですか?

+0

でマップを変更することによって、その場でそれを行うだろうか?あなたのフィルター基準は何ですか?より多くの情報を追加してください –

答えて

11

あなたはConcurrentMapを持っている場合は、単にentrySet()、その後stream()を呼び出すことによって、そのエントリのストリームを作成し、filterを適用することによって値が4よりも大きい長さを持つエントリを保つことができます。最後に、Collectors.toConcurrentMapが組み込まれたConcurrentMapに再び収集することができます。

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

代わりに、あなたは「フィルター」によって何を意味

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

ありがとう、その作品。 1つのマイナーな修正 - 'Map > map = new ConcurrentHashMap <>();'そうでなければ、 'getKey'と' getValue'は解決できません –

関連する問題