首页 > 解决方案 > 如何合并表中相同的值?

问题描述

我有一个数据表,这是列表对象“WorkingTimeReportResponse”:

WorkingTimeReportResponse(Long lineId, String userName, String projectName, String issue, Float totalHours)

对象中属性的关系是:

(1) userName -> (many) project, 
(1) project -> (many) issue, 
(1) issue -> (1) totalHours.

我想合并 userName 和 projectName 的相同值。我的目的是导出到 excel 文件。当我向excel报告时,我想合并它。我正在循环执行:

for (int i = 0; i < allTasks.size()-1; i++)

与“allTask​​s”是一个列表对象“WorkingTimeReportResponse”,它成功了,但现在我想循环:

allTasks.stream().forEach(task -> {});

标签: javaloopsspring-boot

解决方案


allTasks按userName和projectName分组,结果是a Map,key是唯一的(userName + projectName),然后你可以做一些你喜欢的reduce操作。

像这样的组代码:

    Map<Tuple2<String,String>,List<Response>> groupResult = allTasks.stream()
        .collect(Collectors.groupingBy(workingTimeReportResponse -> new Tuple2<>(workingTimeReportResponse.getUserName(),workingTimeReportResponse.getProjectName())));

来自 vavr 库的 Tuple2,依赖是,如果你不想使用这个库,你可以创建一个类:

<dependency>
    <groupId>io.vavr</groupId>
    <artifactId>vavr</artifactId>
    <version>0.9.3</version>
</dependency>

推荐阅读