2014-06-19 30 views
6

tôi đang cố gắng để tạo ra một HashMap sẽ chứa một số nguyên như một chìa khóa và một danh sách các chuỗi như một giá trị:Java 8 bản đồ kết hợp phương pháp

Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(30); 

Tôi muốn bằng cách nào đó cư nó một cách hiệu quả. Những gì tôi đã đưa ra là:

map.merge(search_key, new ArrayList<>(Arrays.asList(new_string)), (v1, v2) -> { 
        v1.addAll(v2); 
        return v1; 
       }); 

Mã này là nhỏ và nhã nhưng vấn đề của tôi là tôi tạo ra một mới Danh sách trong mỗi cuộc gọi. Có cách nào mà tôi có thể bỏ qua việc tạo danh sách sau khi hợp nhất đầu tiên, và chỉ cần thêm new_string trong danh sách được tạo đầu tiên?

+1

“Mã này là nhỏ và thanh lịch”, nhưng bị hỏng. Cố gắng gọi 'addAll' vào kết quả của' Arrays.asList' sẽ không hoạt động ... – Holger

+0

@Holger Bạn nói đúng. Sai lầm của tôi là Arrays.asList (new_string) đưa ra một danh sách cố định, tôi sẽ sửa nó. –

Trả lời

16

Bạn nên sử dụng phương pháp Map::computeIfAbsent để tạo ra một danh sách uể oải:

map.computeIfAbsent(search_key, k -> new ArrayList<>()) 
    .add(new_string); 
Các vấn đề liên quan