Разделить элементы по условиям
Есть класс Item
, описывающий записи в БД.
Также есть коллекция List<Item>
, хранящая список таки объектов. Записи группируются по нескольким полям:
record MyKey(long id, String city, OrderStatus status) {
public MyKey(Item item) {
this(item.getId(), item.getCity(), item.getOrderStatus());
}
}
public static Map<MyKey, List<Item>> groupBy(List<Item> list) {
Map<MyKey, List<Item>> map = new LinkedHashMap<>();
list.forEach(item -> map
.computeIfAbsent(new MyKey(item), k -> new ArrayList<>())
.add(item)
);
// отладочный вывод
map.forEach((key, val) -> {
System.out.println(key);
val.forEach(item -> System.out.println("\t" + item));
});
return map;
}
Добавилось поле date
, которая хранит дату заказа. Как сгруппировать элементы так, чтобы в одной группе были заказы, у которых разница минимальной и максимальной даты не превышали 10 дней?
Источник: Stack Overflow на русском