我有这三个dto课程:
public class OrganismeDTO {
private Long organismeId;
private String libelle;
private List<RoleDTO> rolesDTO;
}
public class RoleDTO {
private String lib;
private Long roleId;
private List<ProfilDTO> profilsDTO;
}
public class UtilisateurRoleDto {
private String organismeLib;
private String roleLib;
}
在我DAO
的函数中,我将返回的列表UtilisateurRoleDto
。
我想要的是创建一个OrganismeDTO
from UtilisateurRoleDto
列表(可以从我的DAO中获得),例如,如果我有一个UtilisateurRoleDto
如下列表:
"Organisme 1", "Role 1"
"Organisme 1", "Role 2"
"Organisme 2", "Role 1"
"Organisme 2", "Role 3"
"Organisme 3", "Role 3"
我想要OrganismeDTO
以下结果列表(其中每个OrganismeDTO
都有的列表RoleDTO
):
"Organisme 1" : ["Role 1", "Role 2"]
"Organisme 2" : ["Role 1", "Role 3"]
"Organisme 3" : ["Role 3"]
如何使用Java 8流实现此功能?
在构造RoleDTO
I 时,我需要插入RoleDTO.profilsDTO
一个列表,该列表是从需要OrganismeDTO.roleId
并返回的函数中获得的List<ProfilDTO>
。
您可以使用自定义的collect来做到这一点(我添加了getter和一些显而易见的构造函数):
Map<String, OrganismeDTO> map = dt.stream().collect(HashMap::new, (m, t) -> {
m.computeIfAbsent(t.getOrganismeLib(), x -> new OrganismeDTO(t.getOrganismeLib())).getRolesDTO().add(new RoleDTO(t.getRoleLib()));
}, (m1, m2) -> {
m2.forEach((k,v) -> {
OrganismeDTO organismeDTO = m1.get(k);
if (organismeDTO != null ) {
organismeDTO.getRolesDTO().addAll(v.getRolesDTO());
} else {
m1.put(k, v);
}
});
});
然后,如果要List
根据值进行创建,则剩下的一切。
List<OrganismeDTO> list = map.values().stream().collect(Collectors.toList());
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句