java - 使用流将对象聚合到 Java 中的集合中

标签 java java-stream

我有一个结构对象列表

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。
换句话说,我想创建一种聚合,它将包含每个包含特定 typeSimpleObject。我想用 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.groupingBytype 分组返回 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/

相关文章:

java - Android:无法创建 MediaPlayer

java - 在java中跨多个数据存储处理事务的方法是什么?

java - 在并行流式处理之前或期间有效地预处理 CSV 数据

Java 8 流和可变参数

java - 如何使用 Java 8 对 List<int[]> 中的值求和

java - 是否值得将 distinct() 与 collect(toSet()) 一起使用

java - 在 Java 中用整数填充任意集合

java - 如何在 Windows 上使用 Java 在默认图像查看器中打开图像?

java - 如何禁用框架并启用关闭/最小/最大按钮

java - Json、正则表达式、java。如何替换仅出现一次的子字符串