gpt4 book ai didi

java - 如何在同一个 `groupingBy` 中处理 `stream()` 的结果 List 值?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:25 25 4
gpt4 key购买 nike

简要说明: collect(groupingBy()) 返回 map Map<K, List<T>> .如何为每个 K 替换 , , 值 List<T>由基于 U 计算的新值(属于 List<T> 类) , 并返回 Map<K, U>相同 stream()


一个例子:假设我有一个 Task ,它由一个 taskId 组成和 Job 的列表小号:

public class Task { int taskId; List<Job> jobList; }

对于每个 Job , 方法 getAgentId确定能够处理它的“代理”:

// in class Job
int getAgentId() { // return the "agent" who is responsible for @param job }

A Task被分成多个子- Task这样它们中的每一个都可以由单独的“代理”处理:

// in class Partition; `Integer` for "agent" id
Map<Integer, Task> partition(Task task) { }

我的尝试: 我使用了 groupingBy :

Map<Integer, Task> partition(Task task) {
int id = task.getTaskId();
Map<Integer, List<Job>> agentJobsMap =
task.getJobList().stream()
.collect(groupingBy(Job::getAgentId),
// question here);
}

问题: 但是我想返回 Map<Integer, Task>而不是 Map<Integer, List<Job>> ;也就是说,我想包装结果 List<Job>groupingBy进入一个新的Task通过 new Task(id, the resulting List<Job>) .怎么做?或者有没有没有 groupingBy 的替代品?

最佳答案

使用 groupingBy 的重载接受另一个 Collector 以用于结果:

task.getJobList().stream()
.collect(
groupingBy(
Job::getAgentId,
collectingAndThen(toList(), jobs -> new Task(id, jobs))));

关于java - 如何在同一个 `groupingBy` 中处理 `stream()` 的结果 List<T> 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34648849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com