我有一个结构对象列表
public class SimpleObject {
private TypeEnum type;
private String propA;
private Integer propB;
private String propC;
}
我想将其“打包”到以下对象中
public class ComplexObject {
private TypeEnum type;
private List<SimpleObject> simpleObjects;
}
基于TypeEnum。
换句话说,我想创建一种聚合,它将包含每个包含特定 type
的 SimpleObject
。我想用 Java 8 流来做,但我不知道怎么做。
假设我正在获取 SimpleObject
的列表
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class DataService {
private final DataRepository dataRepo;
public void getPackedData() {
dataRepo.getSimpleObjects().stream()...
}
}
接下来的步骤应该是什么样的?提前感谢您的帮助
我正在使用 Java 14 和 Spring Boot
最佳答案
您可以使用 Collectors.groupingBy
按 type
分组返回 Map<TypeEnum, List<SimpleObject>>
.然后再次流过 map 的条目集以转换为 List<ComplexObject>
List<ComplexObject> res =
dataRepo.getSimpleObjects()
.stream()
.collect(Collectors.groupingBy(SimpleObject::getType)) //Map<TypeEnum, List<SimpleObject>>
.entrySet()
.stream()
.map(e -> new ComplexObject(e.getKey(), e.getValue())) // ...Stream<ComplexObject>
.collect(Collectors.toList());
关于java - 使用流将对象聚合到 Java 中的集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64608217/