Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java streams将平面对象转换为意向对象_Java_Java 8_Java Stream - Fatal编程技术网

如何使用java streams将平面对象转换为意向对象

如何使用java streams将平面对象转换为意向对象,java,java-8,java-stream,Java,Java 8,Java Stream,我有扁平物体 POJO: 有这样的数据: [{ house: "houseName1", familyMember: "Son" }, { house: "houseName1", familyMember: "Mom" }, { house: "houseName1", familyMember: "Dad" }] 我想把它转换成层次对象 POJO: 阶级之家{ 字符串houseName; 列出家庭成员; } 类家族成员{ 字符串家族成员; } 我找到的每一个信息都要转换成地图。但是

我有扁平物体 POJO:

有这样的数据:

[{
 house: "houseName1",
familyMember: "Son"
},
{
 house: "houseName1",
familyMember: "Mom"
},
{
 house: "houseName1",
familyMember: "Dad"
}]
我想把它转换成层次对象 POJO:

阶级之家{
字符串houseName;
列出家庭成员;
}
类家族成员{
字符串家族成员;
}
我找到的每一个信息都要转换成地图。但是我想要一个包含
List
List
我该怎么办?

试试这个

Map<String,List<FamilyMember>> map = list
              .stream()
              .collect(
                  Collectors.groupingBy(
                      FamilyInformation::getHouseName, 
                      Collectors.mapping(
                          family -> new FamilyMember(family.getFamilyMember()),
                          Collectors.toList()
                      )
                   )
               );
Map=list
.stream()
.收集(
收集者分组(
FamilyInformation::getHouseName,
图(
family->new FamilyMember(family.getFamilyMember()),
收集者
)
)
);
然后

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

这是一个非流式版本:

首先,按
房屋
分组,并通过
forEach
+
computeIfAbsent
映射到
家庭成员

Map<String, List<FamilyMember>> accumulator = new HashMap<>();
source.forEach(f -> accumulator.computeIfAbsent(f.getHouse(),
                  k -> new ArrayList<>()).add(new FamilyMember(f.getFamilyMember())));

..您尝试了什么?它创建了我
List members=new ArrayList()每次迭代都有那么好吗?好的,我试过你的解决方案,但是我认为有一种方法可以在一个流中完成所有的事情。但另一方面,它不可读是的,像这样
list.stream().collect(Collectors.groupingBy(FamilyInformation::getHouseName,Collectors.mapping(family->newfamilymember(family.getFamilyMember()),Collectors.toList())).entrySet().stream().map(e->newhouse(e.getKey(),e.getValue()).collect(Collectors.toList())@HadiJ这仍然是两条流,如果你是这个意思的话,也许只有一行。无论如何(+1)由于我的解决方案与您建议的几乎相同,一旦您的重复次数超过10公里(我会说得更快),您可以确认我指的是什么:
 List<House> result = map.entrySet()
        .stream()
        .map(e -> new House(e.getKey(), e.getValue()))
        .collect(Collectors.toList());
Map<String, List<FamilyMember>> accumulator = new HashMap<>();
source.forEach(f -> accumulator.computeIfAbsent(f.getHouse(),
                  k -> new ArrayList<>()).add(new FamilyMember(f.getFamilyMember())));
List<House> result = new ArrayList<>();
accumulator.forEach((house, familyMembers) -> result.add(new House(house, familyMembers)));