如何在列表上迭代多次以创建类结构?

问题描述

我正在构建使用来自存储过程的数据的微服务。

当我获得数据时,我将它放在 extendedMandatesFound 的列表中,如下所示:

    {
        "extendedMandatesFounds": [
            {
                "profileId": "56426","profileName": "ADMIN","permissionId": "SYstem","subPermisssionId": "TEST1"
            },{
                "profileId": "56426","permissionId": "AUTH.SR","subPermisssionId": "APPROVE"
            },"subPermisssionId": "EXPORT"
            }
        ]
    }

由于有重复的字段,我想使用这样的类来格式化它:

"mandates": [    
     {
        "profileName": "ADMIN","profileId": "56426","permissions": [
            {
                "permissionId": "SYstem","subPermissions": [
                    {
                        "subPermissionId": "TEST1"
                    }
                ]
            },{
                "permissionId": "AUTH.SR","subPermissions": [
                    {
                        "subPermissionId": "APPROVE"
                    },{
                        "subPermissionId": "EXPORT"
                    }
                ]
            }
        ]
    }   
]

我知道我需要用“foreach”迭代三次才能实现这一点,但我不断收到重复的条目:

"mandates": [
        {
            "profileName": "ADMIN","permissions": [
                {
                    "permissionId": "SYstem","subPermissions": [
                        {
                            "subPermissionId": "TEST1"
                        }
                    ]
                },{
                    "permissionId": "AUTH.SR","subPermissions": [
                        {
                            "subPermissionId": "APPROVE"
                        },{
                            "subPermissionId": "EXPORT"
                        }
                    ]
                },{
                            "subPermissionId": "EXPORT"
                        }
                    ]
                }
            ]
        }
    ]

如何使用 foreach 结构进行迭代?

这是我尝试过的,但它给了我上面显示的结果:

List<Mandate> mandates = new ArrayList<Mandate>();
List<Permission> permissions = new ArrayList<Permission>();

for (ExtendedMandatesFound emf : listFound) {
        
    Mandate mandate = new Mandate();
    mandate.setProfileName(emf.getProfileName());
    mandate.setProfileId(emf.getProfileId());

    for (ExtendedMandatesFound emf2 : listFound) {

        if (mandate.getProfileName().equals(emf2.getProfileName())) {

            Permission permission = new Permission();
            permission.setPermissionId(emf2.getPermissionId());
            List<SubPermission> subPermissions = new ArrayList<SubPermission>();

            for (ExtendedMandatesFound emf3 : listFound) {

                if (emf3.getPermissionId().equals(permission.getPermissionId())) {

                    SubPermission subPermission = new SubPermission();
                    subPermission.setSubPermissionId(emf3.getSubPermisssionId());
                    subPermissions.add(subPermission);
                }
            }

            permission.setSubPermissions(subPermissions);

            permissions.add(permission);

        }
    }

    mandate.setPermissions(permissions);

    mandates.add(mandate);

}

以下是课程:

ExtendedMandatesFound.java

public class ExtendedMandatesFound {

    private String profileId;
    private String profileName;
    private String permissionId;
    private String subPermisssionId;
}

Mandate.java

public class Mandate {
    private String profileName;
    private String profileId;
    private List<Permission> permissions;
}

Permission.java

public class Permission {
    private String permissionId;
    private List<SubPermission> subPermissions;
}

SubPermission.java

public class SubPermission {
    private String subPermissionId;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)