繁体   English   中英

使用 Java API 按唯一键将对象列表分组为对象

[英]Group a list of objects by Unique key as a object using Java API

我正在尝试创建键和值关系,并在数据库返回的数据列表之间以 json 格式返回。 我能够实现这种关系,但无法获得所需的 Json 格式作为输出

StudentProfResponse = profRepository.getstudentProfessorHirarchy();

studentprofResponse.stream().collect(Collectors.groupingBy(StudentProfResponse::getProfessorName));

数据库结果

教授姓名 教授 ID 学生 ID 学生姓名

Vinay P123 S567 Karthik
Vinay P123 S568 Jeevan
Mayank P657 S569 米娜
瓦苏 P723 S570 维杰

Json 格式我得到了上面的代码

[
{
    "vinay": [
        {
            "studentId": "S567",
            "StudentName": "Karthik",
            "professorName": "Vinay",
            "professorId": "P123"
        },
        {
            "studentId": "S568",
            "StudentName": "Jeevan",
            "professorName": "Vinay",
            "professorId": "P123"
        }
    ]
},
{
    "Mayank": [
        {
            "studentId": "S569",
            "StudentName": "Meena",
            "professorName": "Mayank",
            "professorId": "P657"
        }
    ]
},
{
    "vasu": [
        {
            "studentId": "S570",
            "StudentName": "Vijay",
            "professorName": "Vasu",
            "professorId": "P723"
        }
    ]
}

]

Json 格式我期待

[
 {
    "professorName": "Vinay",
    "professorId" : "P123",
    "studentDetails": [
        {
            "studentId": "S567",
            "StudentName": "Karthik"
        },
        {
            "studentId": "S568",
            "StudentName": "Jeevan"
        }
    ]
},
{
    "professorName": "Mayank",
    "professorId" : "P657",
    "studentDetails": [
        {
            "studentId": "S569",
            "StudentName": "Meena"
        }
    ]
},
{
    "professorName": "Vasu",
    "professorId" : "P723",
    "studentDetails": [
        {
            "studentId": "S570",
            "StudentName": "Vijay"
        }
    ]
 }
]

有没有办法,我可以通过Java 8流API通过创建一个bean类并发送一个studprofrelationship详细信息列表来实现上述Json格式

public class StudentProfessorRelationship {

private Integer professorNo;

private String professorName;

private List<StudentDetails> studentDetails;

}

我们可以将 Collectors.toMap 与Collectors.toMap(keyMapper, valueMapper, mergeFunction) 的mergeFunction 参数一起使用:

  studentprofResponse.stream()
    .map(resp-> new StudentProfessorRelationship(/*add arguments*/) )
    .collect(
             Collectors.toMap( 
                              StudentProfessorRelationship::getProfessorName, 
                              Function.identity(),
                              (relationship1, relationship2) -> {  
                                      relationship1.getstudentDetails().addAll(
                                           relationship2.getstudentDetails()); 
                                       return realtionship1;} ))  
      .values();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM