按天,周或年对元素流进行分组

时间:2018-10-10 10:10:29

标签: java java-stream grouping

我试图找到一种按天,周或年对元素流进行分组的方法。

我有这个实体:

element {
 id 
 date(ZonedDateTime)
}

所以也许我可以做这样的事情:

elemets.stream()
        .collect(Collectors.groupingBy(t -> t.getDate().with(TemporalAdjusters.ofDateAdjuster('group by day, week or month')));

这可能吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

我不能完全确定这是您所需要的,但似乎是一种将要分组的值作为依据的方法:

private static Map<Integer, List<Element>> group(
        Collection<Element> elements, 
        ChronoField chronoField) {
    return elements.stream().collect(Collectors.groupingBy(
                 x -> x.getDateTime().get(chronoField)));
}

例如通过以下方式调用它:

group(elements, ChronoField.DAY_OF_WEEK);
group(elements, ChronoField.ALIGNED_WEEK_OF_YEAR);
group(elements, ChronoField.YEAR);