我有状物体List<taskDetail> taskDetails和TaskDetail DTO像 public class TaskDetail {
private Task task ;
private int taskId;
private int taskDetailId;
private String status;
...
}而Task DTO像 public class Task{
private int taskId;
private int totalActive;
.....
}所以我必须检查所有条目内taskDetails,并得到数的总量不反对taskId它们ACTIVE的状态和设置内部task's totalActive对象具有匹配的taskId内embedded task object内taskDetails。我能够使用java7这样做,但坚持使用java8。我正在使用Map和存储taskId为关键 Map<Integer,Integer> myTaskMap = new HashMap<Integer,Integer>();
taskDetails.forEach(taskEdt->{
int count =myTaskMap.get(taskEdt.getTask().getTaskId());
if(taskEdt.getStatus() == Status.ACTIVE) {
coun>0? myTaskMap.put(taskEdt.getTask().getTaskId(), count+1);:myTaskMap.put(taskEdt.getTask().getTaskId(), 1)
}
});taskDetails.forEach(taskEdt->{
if(null !=myTaskMap.get(taskEdt.getTask().getTaskId())) {
taskEdt.getTask().setTotalActive(myTaskMap.get(taskEdt.getTask().geTaskId()));
}
});再次ForEach从里面的Task;s totalActive对象里面的地图设置值taskDetails。
2 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
首先,我们流式传输任务详细信息列表,仅过滤ACTIVE活动列表。然后,按组taskId
创建taskId到该taskId列表的TaskDetails
映射。这也将TaskDetails
给出给定taskId 的数量(这是列表的长度)。
然后,我们通过它来运行它并totalActive
通过推断totalActive
列表的长度来更新TaskDetails的任务。(假设你有一个二传手)
Map<Integer, List<TaskDetail>> taskIdToTaskDetailsList = taskDetails.stream() .filter(taskDetail -> taskDetail.getStatus().equals("ACTIVE")) .collect(Collectors.groupingBy(TaskDetail::getTaskId));taskIdToTaskDetailsList.values() .forEach(listOfTaskDetails -> listOfTaskDetails .forEach(taskDetail -> taskDetail.getTask() .setTotalActive(listOfTaskDetails.size())));
注意:对于这个正常工作,taskId
在TaskDetail
必须匹配taskId
的的task
领域。
胡说叔叔
TA贡献1804条经验 获得超8个赞
虽然突变和流一起是我建议不练习但是一种方法来做你想要的可能使用counting
(或reduce
)并进一步使用过滤器更新列表:
Map<Integer, Integer> myTaskMap = taskDetails.stream() .filter(taskEdt -> taskEdt.getStatus().equals("ACTIVE")) .collect(Collectors.groupingBy(taskEdt -> taskEdt.getTask().getTaskId(), Collectors.reducing(0, e -> 1, Integer::sum)));taskDetails.stream() .filter(taskEdt -> myTaskMap.containsKey(taskEdt.getTask().getTaskId())) .forEach(taskEdt -> taskEdt.getTask().setTotalActive( myTaskMap.get(taskEdt.getTask().getTaskId())));
添加回答
举报
0/150
提交
取消