【发布时间】:2020-11-06 21:46:53
【问题描述】:
我有一个List<QueryResult>,其中QueryResult 的结构如下-
class QueryResult{
int projectId;
int taskId;
String projectName;
String projectManager;
}
现在我为 QueryResult 得到的结果是这样的:
queryResult1 -> {projectId:1, taskId:**21**, projectName="xyz" projectManager="abc"}
queryResult1 -> {projectId:1, taskId:**22**, projectName="xyz" projectManager="abc"}
queryResult1 -> {projectId:1, taskId:**23**, projectName="xyz" projectManager="abc"}
queryResult1 -> {projectId:2, taskId:31, projectName="prj2" projectManager="dc"}
queryResult1 -> {projectId:2, taskId:41, projectName="prj2" projectManager="dc"}
现在我想要的输出是这样的:
DesiredOutput ->
{projectId:1,taskIds:{21,22,23}, projectName="xyz" projectManager="abc"}
{projectId:2,taskIds:{31,41}, projectName="prj2" projectManager="dc"}
所以我想将多行转换为一对一projectId 并将不同的taskIds 合并在一起。对于特定项目 ID,除 taskId 之外的其他详细信息保持不变。
我是 java 8 的新手,想以函数式的方式来做这件事。我的解决方案是流式传输所有 queryResults 对象,然后创建一个Map<ProjectID, List<TaskIds>>,但不确定如何以功能样式获取它,并且还必须合并我的结果以形成结果输出。
我正在寻找解决这个小问题的最佳方法。
【问题讨论】:
-
您可能正在寻找
Collectors.groupingBy(QueryResult::getProjectId),然后将其映射到您的DesiredOutput对象
标签: java arraylist collections java-8