我有一份部门清单和地址清单。每个地址都有一个带有起始日期的句点。下面的代码查找每个部门中具有最晚开始日期的地址,并删除所有其他地址。这似乎管用,但我相信可以用更优雅的方式来做。有什么建议吗?
List<Department> departments = fetchDepartments();
departments.forEach(department -> {
Date fromDate = department.getAddresses().stream().map(address ->
address.getPeriod().getFromDate()).max(Date::compareTo).get();
department.setAddresses(department.getAdresses().stream()
.filter(address -> address.getPeriod().getDateFrom().equals(fromDate))
.collect(Collectors.toList()));
});
2条答案
按热度按时间v440hwme1#
你需要一个
TreeMap
收集他们的地址fromDate
,因为作为TreeMap
自动排序,您可以检索最后一个键,即最高的键d6kp6zgx2#
你的代码一开始就不起作用(你有一个setter),那么为什么要使用gimped呢
.forEach
这里是终点站吗?它不短,什么也得不到,并且会丢失异常透明性、局部变量透明性和控制流透明性。当有两种方法可以做一件事,而其中一种方法的能力相对较弱时,不要使用它。此外,如果任何部门的内部地址为零,则代码将失败;在这种情况下,正确的做法当然是什么也不做。另外,如果有2+个地址具有相同的“起始日期”,则保存所有地址。这是故意的还是你宁愿选择一个任意的。
这做的更多(例如,如果一开始没有一个要点,就避免一堆步法,并避免例外)。
尽管它做的更多,但它也明显更短。