我列出了如何将其转换为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
));

08-18 13:40