我有一份服务来获取员工名单。我可能需要根据结果数量多次调用服务。服务的结果将按降序排列,我需要获取员工,直到某些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执行上述操作。
由于