简而言之: collect(groupingBy())
返回一个 mapMap<K, List<T>>
。如何用的新值(类)K
值,并返回相同的? List<T>
U
List<T>
Map<K, U>
stream()
一个例子:假设我有一个Task
,它由 ataskId
和一个Job
s 列表组成:
public class Task { int taskId; List<Job> jobList; }
对于每个Job
, 方法getAgentId
确定一个能够处理它的“代理”:
// in class Job
int getAgentId() { // return the "agent" who is responsible for @param job }
ATask
被划分为多个 sub - Task
s 使得它们中的每一个都可以由一个单独的“代理”处理:
// 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
的 bynew Task(id, the resulting List<Job>)
。怎么做?或者有没有没有的替代品groupingBy
?