为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容3067478 2019-04-26 18:15:34
我有状物体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())));

注意:对于这个正常工作,taskIdTaskDetail必须匹配taskId的的task领域。


查看完整回答
反对 回复 2019-05-15
?
胡说叔叔

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())));


查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 578 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信