Java:GroupingBySubValue作为值
比方说,我有一个对象Person,其字段类型为FirstName和LastName。现在我还有一个Java:GroupingBySubValue作为值,java,java-stream,collectors,Java,Java Stream,Collectors,比方说,我有一个对象Person,其字段类型为FirstName和LastName。现在我还有一个列表,我喜欢使用流 现在我想生成一个地图,以便将同名的人分组。我如何在不编写太多代码的情况下完成这项工作?到目前为止,我的方法是 personList .stream() .collect(Collectors.groupingBy( Person::getFirstName, person -> person.getLastName() // this seems to be
列表
,我喜欢使用流
现在我想生成一个地图
,以便将同名的人分组。我如何在不编写太多代码的情况下完成这项工作?到目前为止,我的方法是
personList
.stream()
.collect(Collectors.groupingBy(
Person::getFirstName,
person -> person.getLastName() // this seems to be wrong
));
但这似乎是分配地图值的错误方式。我应该换什么?或者我应该使用.reduce作为初始值,并使用
new HashMap()
作为初始值,然后将元素放入其中进行聚合?我认为您正在寻找类似以下内容:
Map<String, Map<String, List>> map = personList.stream()
.collect(groupingBy(Person::getFirstName, groupingBy(Person::getLastName)));
Map Map=personList.stream()
.collect(groupingBy(Person::getFirstName,groupingBy(Person::getLastName)));
双重分组为您提供了一个映射的映射。这就是诀窍。这应该适合您:
Map<String, List<String>> map = personList.stream()
.collect(Collectors.groupingBy(Person::getFirstName,
Collectors.mapping(Person::getLastName, Collectors.toList())));
Map Map=personList.stream()
.collect(收集器).groupingBy(个人::getFirstName,
Collectors.mapping(Person::getLastName,Collectors.toList());
您正在寻找具有
groupingBy
的下游收集器,谢谢,但该值应该是一个简单的列表,而不是另一个映射。
personList.stream()
.collect(Collectors.groupingBy(
Person::getFirstName,
Collectors.mapping(Person::getLastName, Collectors.toList())));