java - 如何合并表中相同的值?
问题描述
我有一个数据表,这是列表对象“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++)
与“allTasks”是一个列表对象“WorkingTimeReportResponse”,它成功了,但现在我想循环:
allTasks.stream().forEach(task -> {});
解决方案
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>
推荐阅读
- windows - 从 Ubuntu 20.04 Vim 复制并粘贴到另一个应用程序
- django - Django 过滤器表单默认显示为下拉列表;更改为复选框
- next.js - Next.js 将 api 限制为我的 next.js 应用程序和我的移动应用程序
- javascript - Vue 3 在静态对象上使用响应式是否很好
- sql - 期末余额
- r - 在 ggplot 的现有图中添加数据点
- javascript - 使用 jquery 或 javascript 将任何附加事件添加到 DOM 的事件侦听器
- mongodb - 根据现有集合过滤出具有特定 ID 的数组的对象 - (聚合框架)?
- ansible - Ansible:Jinja2 模板测试既定义了变量又不为空
- ios - M1 Xcode Launched App 因 DebugServer 占用进程而冻结