简要说明: 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/