使用Java 8流从另一个列表创建对象列表

雷诺不是比尔·盖茨:

我有这三个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

我想要的是创建一个OrganismeDTOfrom 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流实现此功能?

更新:

在构造RoleDTOI 时,我需要插入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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 java8 流从另一个列表创建对象列表

使用Java流从另一个对象列表更新对象列表

如何使用流将对象列表转换为另一个列表对象?

Java流:将一个对象的列表转换为另一个

使用实时转换在另一个列表上创建对象的 java 列表

使用 Java 8 中的另一个列表过滤对象列表

Java 8-如何从另一个列表中的对象设置列表中的对象?

同时迭代两个列表,并创建另一个使用流

我是否可以使用流创建一个列表,其中critera将检查一个列表,然后将一个对象添加到另一个列表?

Java 8 从另一个列表创建谓词列表

使用流从嵌套在另一个对象列表中的对象列表中筛选属性

使用流基于另一个列表更新一个列表

如何使用 Java 8 lambdas 将对象添加到另一个列表内的列表中

循环多个不同类型的列表并使用 java 8 lambda 表达式创建另一个列表

如何在Java 8中迭代对象数组列表并设置为另一个对象列表?

转换Java列表到另一个使用Java流

使用Java8使用另一个列表过滤列表

java-从另一个列表的子属性创建一个列表

通过使用Java比较另一个列表排序对象列表

如何使用另一个实例列表在Java中高效创建实例列表

使用 Java 8 Streams 根据另一个列表过滤列表

Java的8流:找到一个列表中的项目相匹配的条件计算基于从另一个列表中值

使用另一个列表的长度以流为基础遍历列表

使用流将列表转换为另一个列表

Java 8在对象列表中找到匹配的元素,其中每个对象都有另一个对象

使用另一个复杂对象列表对复杂对象列表进行排序 C#

使用与另一个列表Java流的整个内容匹配的条目来过滤列表的内容

一个列表至少包含另一个列表中的一个值(Java 8)

Java 8如何处理一个列表中的对象并将其收集到另一个列表中?