有一个服务列表,例如:
List<Item> list = new ArrayList<>();
list.add(new Item(123456789, 01.04.2023));
list.add(new Item(123456789, 14.04.2023));
list.add(new Item(123456789, 21.04.2023));
list.add(new Item(123456789, 30.04.2023));
格式中的日期LocalDate,但为了清楚起见,这样表示。
有必要将服务列表分组,以便每个组在 14 天内都有服务。例如,对于上面的示例,将有两组:
第一个日期为 04/01/2023 和 04/14/2023 第二个日期为 04/21/2023 和 04/30/2023
我喜欢这样:
list.sort(Comparator.comparing(Item::getDate_in));
Map<Integer, List<Item>> groups = list.stream()
.collect(Collectors.groupingBy(i ->
(int) ChronoUnit.DAYS.between(list.get(0).getDate_in(), i.getDate_in()) / 14));
for (Map.Entry<Integer, List<Item>> entry1 : groups.entrySet()) {
System.out.println(entry1.getKey());
for (Item Item : entry1.getValue()) {
System.out.println(Item + " \n");
}
}
但结果是三个小组而不是两个。你能告诉我分组的最佳方法吗?
Map<Boolean, List<Item>>在问题https://ru.stackoverflow.com/questions/1507202/Separate-elements-by-conditions/1507257?noredirect=1#comment2704072_1507257中使用as是不合适的,因为此解决方案是将列表分为两组,并且可能会有三个小组。例如像这样:
List<Item> list = new ArrayList<>();
list.add(new Item(123456789, 01.04.2023));
list.add(new Item(123456789, 14.04.2023));
list.add(new Item(123456789, 15.04.2023));
list.add(new Item(123456789, 30.04.2023));
应该已经有三个组了。