【发布时间】:2020-05-09 07:29:50
【问题描述】:
我有类似以下的 DTO
public class UserDTO implements Serializable {
private String id;
private String fullName;
private String phone;
private String role;
private List<String> roleList;
public UserDTO(String id, List<String> roleList) {
super();
this.id = id;
this.roleList = roleList;
}
}
我有UserDTO 的列表,其中roleList 未填充,但role 已填充。问题是role 可能是多个但不知何故我无法设法在单个查询中获取列表。所以,我想按 id 分组并生成roleList。
例如,我有以下几行:
id fullName phone role roleList
------------------------------------------------
abc Sarwar 017xxx admin NULL
abc Sarwar 017xxx operator NULL
I want it to be like the following
abc Sarwar 017xxx NULL ArrayList<String>(admin, operator)
我尝试了以下方法,但它不起作用(不应该,但我不知道应该是什么)这就是我寻求您帮助的原因:
Map<String, List<UserDTO>> resultsWithSameIdAndName = users.stream()
.collect(Collectors.groupingBy(r -> r.getId()));
List<UserDTO> mergedResults = resultsWithSameIdAndName.entrySet().stream()
.map(e -> new UserDTO(e.getKey(),
e.getValue().stream().map(r -> r.getRole()).collect(Collectors.toList())))
.collect(Collectors.toList());
提前致谢。
【问题讨论】:
-
您的模型似乎存在设计问题。填充
roleList后,role字段是什么意思? -
你能提到什么不起作用吗?对于您给出的示例,您的代码会产生什么输出?
-
@user7:实际上,这不是作为 DTO 的中间模型的实体。我无法从休眠中填充角色列表。实际上,我尝试过的代码没有填充角色列表。和以前一样是
NULL。我希望它是List -
您在查看新的
mergedResults对象吗?还是users对象? -
@user7:
mergedResults实际上。实际上mergedResults是UserDTO的列表,但mergedResults 不起作用。我想与id分组并填充roleList。这是我的要求。谢谢。