简要地说: collect(groupingBy())
返回一张地图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 }
将ATask
划分为多个子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))));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句