猿问

如何使用 java 8 按“名称”对对象进行分组?

我有DTO一些属性,例如idnamedesc等。

它的所有属性都有 getter 和 setter。

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

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

我需要通过使用对其进行分组来将其转换ListMap<String, Object> (不是Map<String,String>namesJava8

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

如何将MyDto列表分组到地图中?

其中键是名称 ( 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"}

]


}


慕标5832272
浏览 135回答 1
1回答

九州编程

只需使用Collectors::groupingBy并将方法引用传递给MyDto::getName将用作地图键的方法:List<MyDto> dtos = ... Map<String, List<MyDto>> map = dtos.stream()             .collect(Collectors.groupingBy(MyDto::getName));
随时随地看视频慕课网APP

相关分类

Java
我要回答