Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:GroupingBySubValue作为值_Java_Java Stream_Collectors - Fatal编程技术网

Java:GroupingBySubValue作为值

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

比方说,我有一个对象Person,其字段类型为FirstName和LastName。现在我还有一个
列表
,我喜欢使用流

现在我想生成一个
地图
,以便将同名的人分组。我如何在不编写太多代码的情况下完成这项工作?到目前为止,我的方法是

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())));