gpt4 book ai didi

java - 如何使用java 8按 'name'对对象进行分组?

转载 作者:行者123 更新时间:2023-12-01 17:43:23 24 4
gpt4 key购买 nike

我有一个DTO具有很少的属性,例如 id , name , desc

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

我得到一个Page<MyDto>来 self 需要根据 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 方法,该方法将用作 map 的键:

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

关于java - 如何使用java 8按 'name'对对象进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58269249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com