2016-03-15 22 views
5

Tôi đang cố gắng lọc ConcurrentHashMap<String, LinkedList<String>> theo kích thước của LinkedList<String>.Lọc ConcurrentHashMap theo giá trị

Nói cách khác, tôi muốn lọc ra các phần tử trong ConcurrentHashMap nơi kích thước của LinkedList<String> lớn hơn 4. Làm thế nào tôi có thể thực hiện nó bằng Java 8?

+0

những gì bạn có nghĩa là bởi 'lọc'? tiêu chí lọc của bạn là gì? xin vui lòng thêm thông tin –

Trả lời

11

Nếu bạn có một ConcurrentMap, bạn chỉ có thể tạo ra một dòng mục của nó, bằng cách gọi entrySet() và sau đó stream() và giữ các mục trong đó giá trị có chiều dài lớn hơn 4 bằng cách áp dụng một filter. Cuối cùng, bạn có thể thu thập lại lần nữa vào một số ConcurrentMap với số Collectors.toConcurrentMap được tích hợp sẵn.

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

Ngoài ra, bạn có thể làm điều đó tại chỗ bằng cách thay đổi bản đồ với

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

Cảm ơn một bó, mà hoạt động. Một sửa đổi nhỏ - 'Bản đồ > map = new ConcurrentHashMap <>();' nếu không trình biên dịch nói 'getKey' và' getValue' không thể giải quyết được –

Các vấn đề liên quan