我有一个DTO,只有几个属性,例如idnamedesc等。

它具有所有属性的获取器和设置器。

我从服务中得到一个Page<MyDto>,我需要根据name属性对DTO进行分组。

首先,我使用Page<MyDto>List<MyDto>转换为page.getContent

我需要使用List将相同的Map<String, Object>分组,从而将该Map<String,String>转换为names(不是Java8)。

我找到了一些示例,但是它们并没有解决我的问题。

如何将MyDto列表分组到Map中?

其中的键是名称(String),每个名称的值将是Array<MyDto>

例如:

If `List<MyDto>` is :
[
{"id":1, "name":"albert", "desc":"science"},
{"id":2, "name":"george", "desc":"econ"},
{"id":3, "name":"christ", "desc":"math"},
{"id":4, "name":"george", "desc":"literature"} // george repeats twice
]


输出Map应为:

{

"george":

[
{"id":2, "name":"george", "desc":"econ"},
{"id":4, "name":"george", "desc":"literature"}
],


"christ":

[
{"id":3, "name":"christ", "desc":"math"}
],


"albert":

[
{"id":1, "name":"albert", "desc":"science"}
]

}

最佳答案

只需使用Collectors::groupingBy并将方法引用传递给MyDto::getName方法,该方法将用作地图的键:

List<MyDto> dtos = ...
Map<String, List<MyDto>> map = dtos.stream()
            .collect(Collectors.groupingBy(MyDto::getName));

10-08 16:29