2016-03-15 29 views
5

ConcurrentHashMap<String, LinkedList<String>> numaralı telefonu LinkedList<String> boyutlarına göre filtrelemeye çalışıyorum.Filtre ConcurrentHashMap değeri

Başka bir deyişle,öğesinin LinkedList<String> boyutunun 4'ten büyük olduğunu filtrelemek istiyorum. Java 8 ile nasıl yapılır? Eğer bir ConcurrentMap varsa

+0

ile harita size 'filtresi' ne demek istiyorsunuz değiştirerek yerinde yapabildi? filtre kriteriniz nedir? lütfen daha fazla bilgi ekleyin –

cevap

11

, sadece entrySet() ve sonra stream() arayarak, kendi girdilerinin akışı oluşturmak ve değer bir filter uygulanarak 4'ten büyük bir uzunluğa sahip girdileri tutabilir. Son olarak, ConcurrentMap içine yerleşik Collectors.toConcurrentMap ile tekrar toplayabilirsiniz.

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

Alternatif olarak,

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

Teşekkürler bir demet, işe yarıyor. Bir küçük düzeltme - Harita > map = new ConcurrentHashMap <>(); 'Aksi takdirde derleyici' getKey' ve 'getValue' çözülemez –