我有一个DTO
,只有几个属性,例如id
,name
,desc
等。
它具有所有属性的获取器和设置器。
我从服务中得到一个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));