使用流将对象聚合到Java中的集合中
我有一个结构对象列表使用流将对象聚合到Java中的集合中,java,java-stream,Java,Java Stream,我有一个结构对象列表 公共类SimpleObject{ 私有类型枚举类型; 私有字符串propA; 私有整数propB; 私有字符串propC; } 我想将其“打包”到以下对象中 公共类ComplexObject{ 私有类型枚举类型; 私有列表simpleObjects; } 基于TypeEnum。 换句话说,我想创建一种聚合,它将保存每个SimpleObject,其中包含特定的类型。我想用Java8流来做,但我不知道怎么做 假设我得到了SimpleObjects的列表 @服务 @Requi
公共类SimpleObject{
私有类型枚举类型;
私有字符串propA;
私有整数propB;
私有字符串propC;
}
我想将其“打包”到以下对象中
公共类ComplexObject{
私有类型枚举类型;
私有列表simpleObjects;
}
基于TypeEnum。换句话说,我想创建一种聚合,它将保存每个
SimpleObject
,其中包含特定的类型。我想用Java8流来做,但我不知道怎么做
假设我得到了SimpleObject
s的列表
@服务
@RequiredArgsConstructor(onConstructor=@_u(@Autowired))
公共类数据服务{
私有最终数据存储库dataRepo;
public void getPackedData(){
dataRepo.getSimpleObjects().stream()。。。
}
}
接下来的步骤应该是什么样子?提前感谢您的帮助
我将Java 14与Spring Boot一起使用您可以使用收集器。groupingBy
到groupby类型
,返回映射
。然后再次在映射的入口集上进行流式转换,以转换为List
List res=
dataRepo.getSimpleObjects()
.stream()
.collect(收集器.groupingBy(SimpleObject::getType))//映射
.entrySet()
.stream()
.map(e->new ComplexObject(e.getKey(),e.getValue())/…流
.collect(Collectors.toList());
您可以使用收集器.groupingBy
实现这一点,并使用收集器将条目进一步转换为对象列表.collecting,然后
List<SimpleObject> list = ...
List<ComplexObject> map = list.stream()
.collect(Collectors.collectingAndThen(
Collectors.groupingBy(SimpleObject::getType), // group by TypeEnum
map -> map.entrySet() // map entries to ..
.stream()
.map(e -> new ComplexObject(e.getKey(), e.getValue())) // .. ComplexObject
.collect(Collectors.toList()))); // .. to List
List=。。。
List map=List.stream()
收集,收集收集,然后收集(
Collectors.groupingBy(SimpleObject::getType),//按TypeEnum分组
map->map.entrySet()//将条目映射到。。
.stream()
.map(e->new ComplexObject(e.getKey(),e.getValue())/…ComplexObject
.collect(Collectors.toList());/。。列出
我目前还没有发现另一种解决方案,只要流API在处理字典结构时不友好。这是否回答了您的问题?
List<SimpleObject> list = ...
List<ComplexObject> map = list.stream()
.collect(Collectors.collectingAndThen(
Collectors.groupingBy(SimpleObject::getType), // group by TypeEnum
map -> map.entrySet() // map entries to ..
.stream()
.map(e -> new ComplexObject(e.getKey(), e.getValue())) // .. ComplexObject
.collect(Collectors.toList()))); // .. to List