Java 流 - 将列表排序为列表的哈希映射

2022-08-31 16:01:13

假设我有一个班级。Dog

在里面我有一个,其中一个值是。Map<String,String>Breed

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

我想得到一个 s:MapList

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

我更喜欢使用 a 而不是迭代它。Stream

我该怎么做?


答案 1

您可以使用 .groupingBy

假设你的输入是一个,类内的成员被调用,Breed被存储为“Breed”键:List<Dog>MapDogmap

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

答案 2

上面的伟大答案可以通过方法参考符号进一步改进:

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