Java 8按小时分组对象

时间:2019-04-23 14:04:46

标签: java

我有一个以此方式制成的对象清单:

public class Object{
    private Date date;
    private double value;

    //getters and setters
}

我只需要每小时采集一次物体。

我的想法是通过这种方式使用Java8流和groupingBy函数

Map<Integer, List<Object>> map = objects()
    .collect(Collectors.groupingBy(x -> x.getDate().get(ChronoField.HOUR_OF_DAY)));

但是以这种方式,即使我的清单中有多天,我也只需要24个元素(一天每小时一小时)。如何按天/小时分组?

2 个答案:

答案 0 :(得分:3)

我强烈建议您在此处使用LocalDateTime而不是Date

基本上,您不想按小时数字分组。您想将每个不同的时间放在不同的组中,对吗?这意味着按年,月,日和小时分组。

执行此操作的一种方法是仅按格式将日期归类到一个小时:

.collect(Collectors.groupingBy(x -> DateTimeFormatter.ofPattern("yyyyMMddHH").format(x));

或者,使用truncatedTo将每个日期截断为小时:

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

答案 1 :(得分:0)

您可以尝试按日期和小时将其分组:

objects().collect(
      groupingBy(x -> x.getDate().get(ChronoField.DAY_OF_YEAR),
       groupingBy(x -> x.getDate().get(ChronoField.HOUR_OF_DAY))));