如何在java8流groupingBy中按时间段拆分LocalDateTime列表?

时间:2019-05-24 10:18:07

标签: java java-8 java-stream grouping localdate

我有一个LocalDateTime列表。我想将列表分为多个子列表,其中一天之内可以有不同的元素。例如,列表可以是:

[ 2014-04-29T00:00:00,
  2014-04-29T10:00:00,
  2014-04-29T20:00:00,
  2014-04-30T00:00:00,
  2014-04-30T09:00:00,
  2014-04-30T19:00:00
]

将它们拆分为一天的时间时,将拆分为3个子列表。每个列表的LocalDateTime元素不得超过24小时。我该如何使用stream groupingBy

[ 2014-04-29T00:00:00,
  2014-04-29T10:00:00,
  2014-04-29T20:00:00]

[2014-04-29T10:00:00,
  2014-04-29T20:00:00,
  2014-04-30T00:00:00,
  2014-04-30T09:00:00
]

[2014-04-29T20:00:00,
  2014-04-30T00:00:00,
  2014-04-30T09:00:00,
  2014-04-30T19:00:00
]

1 个答案:

答案 0 :(得分:0)

您可以构建地图作为中间步骤:

Map<LocalDateTime, List<LocalDateTime>> groupedDates = dates.stream().collect(Collectors.groupingBy(date -> date));

在这一点上,唯一的区别是您将通过一个附加级别的键来映射子列表,这将是子列表中包含的日期,但是您可以通过迭代映射和构造一个列表列表。