将List<>映射到Map<Integer,Set>并附加转换

我需要将一个对象列表转换为一个对象属性集的映射,我想为此使用 Java 流。

例如,有一个List<Dog>,我想将它转换为一个HashMap,其中关键是狗的年龄,价值是Set品种。

@Getter //lombok for getters
public class Dog {
    private String name;
    private int age;
    private int breed;
}

我可以Map<Integer, Set<Dog>> dogsByAge使用此语句创建一个。

Map<Integer, Set<Dog>> dogsByAge = dogs.stream()
                                       .collect(groupingBy(Dog::getAge, toSet()));

不过我需要 Map<Integer, Set<String>> breedsByAge

可以使用流吗?

回答

以下内容应符合要求:

Map<Integer, Set<Integer>> breedsByAge = dogs.stream()
                .collect(Collectors.groupingBy(Dog::getAge, Collectors.mapping(Dog::getBreed, Collectors.toSet())));

演示:

public class Main {
    public static void main(String[] args) {
        List<Dog> dogs = List.of(new Dog("A", 10, 1), new Dog("B", 5, 1), new Dog("C", 10, 2), new Dog("D", 10, 3),
                new Dog("E", 5, 4));

        Map<Integer, Set<Integer>> breedsByAge = dogs.stream()
                .collect(Collectors.groupingBy(Dog::getAge, Collectors.mapping(Dog::getBreed, Collectors.toSet())));

        System.out.println(breedsByAge);
    }
}

输出:

{5=[1, 4], 10=[1, 2, 3]}


以上是将List&lt;&gt;映射到Map&lt;Integer,Set&gt;并附加转换的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>