如何使用java流将平面对象转换为有意对象

Adr*_*ano 2 java java-8 java-stream

我有平面对象POJO:

class FamilyInformation {
  String house;
  String familyMember;
}
Run Code Online (Sandbox Code Playgroud)

使用这样的数据:

[{
 house: "houseName1",
familyMember: "Son"
},
{
 house: "houseName1",
familyMember: "Mom"
},
{
 house: "houseName1",
familyMember: "Dad"
}]
Run Code Online (Sandbox Code Playgroud)

我想将其转换为分层对象POJO:

class House {
  String houseName;
  List<FamilyMember> familyMembers;
}
class FamilyMember {
  String familyMember;
}
Run Code Online (Sandbox Code Playgroud)

我发现的每一条信息都是将其转换为地图.但是我想要List<House>包含List<FamilyMember>任何想法我该怎么办?

Had*_*i J 6

试试这个吧

Map<String,List<FamilyMember>> map = list
              .stream()
              .collect(
                  Collectors.groupingBy(
                      FamilyInformation::getHouseName, 
                      Collectors.mapping(
                          family -> new FamilyMember(family.getFamilyMember()),
                          Collectors.toList()
                      )
                   )
               );
Run Code Online (Sandbox Code Playgroud)

然后

 List<House> result = map.entrySet()
        .stream()
        .map(e -> new House(e.getKey(), e.getValue()))
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • @HadiJ仍然是两个流,如果这就是你的意思,只有一行.无论如何(+1),因为我的解决方案与你建议的几乎相同,一旦你超过10k的代表(我会说的越早),你就可以确认我指的是什么.:) (3认同)