代码之家  ›  专栏  ›  技术社区  ›  ZaoTaoBao

按天、周或年对元素流进行分组[重复]

  •  3
  • ZaoTaoBao  · 技术社区  · 6 年前

    我正试图找到一种方法,将一系列元素按天、周或年进行分组。

    element {
     id 
     date(ZonedDateTime)
    }
    

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

    这可能吗?

    谢谢。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Eugene    6 年前

    我不完全确定这是您所需要的,但似乎是一种方法,它采用您想要分组的值,即您所追求的值:

    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);