How to convert flat object into intendent object by using java streams

Adriano :

I have flat object POJO:

class FamilyInformation {
  String house;
  String familyMember;
}

with data like this:

[{
 house: "houseName1",
familyMember: "Son"
},
{
 house: "houseName1",
familyMember: "Mom"
},
{
 house: "houseName1",
familyMember: "Dad"
}]

And I want to convert it into hierarchical object POJO:

class House {
  String houseName;
  List<FamilyMember> familyMembers;
}
class FamilyMember {
  String familyMember;
}

Every information I found is to convert it to a Map. But I want to have List<House> which contains List<FamilyMember> any ideas what should I do?

Hadi J :

Try this one

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

and then

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

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=113007&siteId=1