我需要将一个对象列表转换为一个对象属性集的映射,我想为此使用 Java 流。
例如,有一个List<Dog>,我想将它转换为一个HashMap,其中关键是狗的年龄,价值是Set品种。
@Getter //lombok for getters
public class Dog {
private String name;
private int age;
private int breed;
}
Run Code Online (Sandbox Code Playgroud)
我可以Map<Integer, Set<Dog>> dogsByAge使用此语句创建一个。
Map<Integer, Set<Dog>> dogsByAge = dogs.stream()
.collect(groupingBy(Dog::getAge, toSet()));
Run Code Online (Sandbox Code Playgroud)
不过我需要 Map<Integer, Set<String>> breedsByAge
可以使用流吗?
以下内容应符合要求:
Map<Integer, Set<Integer>> breedsByAge = dogs.stream()
.collect(Collectors.groupingBy(Dog::getAge, Collectors.mapping(Dog::getBreed, Collectors.toSet())));
Run Code Online (Sandbox Code Playgroud)
演示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
{5=[1, 4], 10=[1, 2, 3]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |