[英]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.