Java流 - 将列表排序到列表的HashMap

Bic*_*ick 35 java hashmap java-8 java-stream

假设我有一Dog堂课.

在里面我有一个Map<String,String>和一个值是Breed.

public class Dog {
    String id;
    ...
    public Map<String,String>
}
Run Code Online (Sandbox Code Playgroud)

我想获得MapListS:

HashMap<String, List<Dog>> // breed to a List<Dog>
Run Code Online (Sandbox Code Playgroud)

我宁愿使用Stream而不是迭代它.

我该怎么做?

Era*_*ran 64

你可以做到groupingBy.

假设您的输入是a List<Dog>,则调用类中的Map成员,并为"Breed"键存储Breed:Dogmap

List<Dog> dogs = ...
HashMap<String, List<Dog>> map = dogs.stream()
                                     .collect (Collectors.groupingBy(d -> d.map.get("Breed")));
Run Code Online (Sandbox Code Playgroud)


Nes*_*aev 37

通过使用函数式编程符号,可以进一步改善上面的好答案:

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