我列出了如何将其转换为Map,在其中可以将具有最小值的键作为键值对。我想将此代码转换为流。
Map<Long, Date> formToDate = new HashMap<>();
for(FormInstance formInstance : formInstances) {
if(formToDate.get(formInstance.getForm().getId()) == null) {
formToDate.put(formInstance.getForm().getId(), formInstance.getCreatedDate());
}
else{
Date prevDate = formToDate.get(formInstance.getForm().getId());
Date thisDate = formInstance.getCreatedDate();
formToDate.put(formInstance.getForm().getId(), prevDate.before(thisDate) ? prevDate : thisDate);
}
}
像这样:
Map<Long, List<Date>> formToDate = formInstances.stream()
.collect(
Collectors.groupingBy(formInstance -> formInstance.getForm().getId(),
Collectors.mapping(FormInstance::getCreatedDate, Collectors.toList())));
但是我不想返回列表,而是希望拥有最小的日期。
最佳答案
有一个Collector::toMap
实现提供了合并功能。这可用于从两个具有相同id的不同条目中确定最小日期,例如:
Map<Long, Date> minimum = formInstances.stream().collect(Collectors.toMap(
fi -> fi.getForm().getId(),
FormInstance::getCreatedDate,
(date, date2) -> date.before(date2) ? date : date2
));