Java 8 Stream迭代用于合并Map <string,list <object>&gt;

时间:2017-11-09 23:42:26

标签: java

我有一份服务来获取员工名单。我可能需要根据结果数量多次调用服务。服务的结果将按降序排列,我需要获取员工,直到某些ID(lastEmpId)。

我按如下方式进行分页。

    Map<String, List<RetiredEmployee>> empsMap = new HashMap<>();
    int lastEmpId = 100;
    int empId = 10000;
    int offset = 0;
    int pageSize = 100;

    while ((pageSize > 0) && emp.getEmpId > lastEmpId) {

       final List<Employee> employeesList = empClient.getEmployees(pageSize, offset);

        // Merging each page with the global empsMap ...
        employeesList.stream()
        .map(RetiredEmployee::new)
        .filter(e -> e.getEmpJoinTime().isPresent())
        .collect(Collectors.groupingBy(e -> 
         e.getEmployee().getName()))
         .entrySet().stream().forEach(e -> empsMap.merge(e.getKey(), e.getValue(), (v1, v2) -> {
            Set<RetiredEmployee> set = new TreeSet<>(v1);
            set.addAll(v2);
            return new ArrayList<>(set);
        }));;

        lastEmpId = employeesList.get(employeesList.size() - 1);
        pageSize = employeesList.size();
    }

有没有更好的方法可以在没有while循环逻辑的情况下使用Stream.iterate执行上述操作。

由于

0 个答案:

没有答案