2015-01-21 43 views
10

可以說我有一個Dog類。 裏面我有一張地圖,其中一個值是Breed。Java流 - 將列表分類到列表的散列圖

public class Dog{ 
    String id; 
    ... 
    public map<String,String> 
} 

我想要得到地圖列表

HashMap<String, List<Dog>> // breed to a list<Dog> 

使用流而不是迭代它的。
我該怎麼做?

回答

25

你可以用groupingBy來做到這一點。

假設你的輸入是List<Dog>,那Dog類中的Map成員稱爲map和品種是存放在「繁殖」鍵:

List<Dog> dogd = ... 
HashMap<String, List<Dog>> map = dogs.stream() 
            .collect (Collectors.groupingBy(d -> d.map.get("Breed"))); 
10

偉大的答案以上,能夠進一步提高通過使用函數式編程表示法:

List<Dog> dogs = ... 
HashMap<String, List<Dog>> map = dogs.stream().collect(Collectors.groupingBy(Dog::getBreed));