【发布时间】:2021-04-11 18:26:15
【问题描述】:
我需要将对象列表转换为对象属性之一的集合映射,并且我想为此使用 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>> dogsByAgea。
Map<Integer, Set<Dog>> dogsByAge = dogs.stream()
.collect(groupingBy(Dog::getAge, toSet()));
不过我需要Map<Integer, Set<String>> breedsByAge
这可能使用流吗?
【问题讨论】:
-
这绝对是可能的,但您似乎没有足够的属性来建立唯一性……您可以轻松拥有两个年龄、姓名和品种相同的
Dogs。显示完整的Dog类,包括hashCode()和equals()方法(你确实有这些,对吗?)。 -
groupingBy(Dog::getAge, Collectors.mapping(Dog::getBreed, toSet)) -
@JimGarrison 我不需要唯一性,集合的重点是避免结果中出现重复的品种。
@Data不好选,应该有@Getter
标签: java java-stream