Java8 Collectors.groupingBy

时间:2018-10-12 09:45:55

标签: collections java-8 java-stream

我想基于LocalDateTime按集合分组,但我只想获取小时,而不是分钟,秒...

.collect(Collectors.groupingBy(cp -> getUpdateLocalDate())


public LocalDate getUpdateLocalDate() {
    return getUpdateDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}

但是我还需要日期,例如:2018-10-12T09:00:00,不仅是小时

2 个答案:

答案 0 :(得分:5)

请注意,LocalDate没有时区。而是从方法getUpdateLocalDate返回LocalDateTime(可能也值得重命名),然后截断LocalDateTime实例。

 .collect(Collectors.groupingBy(cp -> cp.getUpdateLocalDateTime().truncatedTo(ChronoUnit.HOURS));

答案 1 :(得分:4)

As said by AomineLocalDate不包含任何时间信息,因此,您必须更改返回LocalDateTime的方法。

public LocalDateTime getUpdateLocalDateTime() {
    return getUpdateDate().toInstant()
        .atZone(ZoneId.systemDefault()).toLocalDateTime();
}

然后,您可以按以下方式执行操作

.collect(Collectors.groupingBy(cp ->
    cp.getUpdateLocalDateTime().truncatedTo(ChronoUnit.HOURS))