猿问

使用java 8在嵌入对象中设置值

我有状物体List<taskDetail> taskDetailsTaskDetail 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对象具有匹配的taskIdembedded task objecttaskDetails。我能够使用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


慕容3067478
浏览 579回答 2
2回答

胡子哥哥

首先,我们流式传输任务详细信息列表,仅过滤ACTIVE活动列表。然后,按组taskId创建taskId到该taskId列表的TaskDetails映射。这也将TaskDetails给出给定taskId&nbsp;的数量(这是列表的长度)。然后,我们通过它来运行它并totalActive通过推断totalActive列表的长度来更新TaskDetails的任务。(假设你有一个二传手)Map<Integer,&nbsp;List<TaskDetail>>&nbsp;taskIdToTaskDetailsList&nbsp;=&nbsp;taskDetails.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(taskDetail&nbsp;->&nbsp;taskDetail.getStatus().equals("ACTIVE")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(TaskDetail::getTaskId));taskIdToTaskDetailsList.values() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forEach(listOfTaskDetails&nbsp;->&nbsp;listOfTaskDetails&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forEach(taskDetail&nbsp;->&nbsp;taskDetail.getTask() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.setTotalActive(listOfTaskDetails.size())));注意:对于这个正常工作,taskId在TaskDetail必须匹配taskId的的task领域。

胡说叔叔

虽然突变和流一起是我建议不练习但是一种方法来做你想要的可能使用counting(或reduce)并进一步使用过滤器更新列表:Map<Integer,&nbsp;Integer>&nbsp;myTaskMap&nbsp;=&nbsp;taskDetails.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(taskEdt&nbsp;->&nbsp;taskEdt.getStatus().equals("ACTIVE")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(taskEdt&nbsp;->&nbsp;taskEdt.getTask().getTaskId(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collectors.reducing(0,&nbsp;e&nbsp;->&nbsp;1,&nbsp;Integer::sum)));taskDetails.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(taskEdt&nbsp;->&nbsp;myTaskMap.containsKey(taskEdt.getTask().getTaskId())) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.forEach(taskEdt&nbsp;->&nbsp;taskEdt.getTask().setTotalActive( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myTaskMap.get(taskEdt.getTask().getTaskId())));
随时随地看视频慕课网APP

相关分类

Java
我要回答