Как собирать объекты как "карту" "? - PullRequest
2 голосов
/ 29 мая 2020

Мне нужно собрать записи сущности с даты по сегодняшний день на основе значения одного атрибута. Если значение атрибута type последовательно совпадает с датой, его следует сгруппировать по дате. Поскольку дата указана последовательно, необходимо заказывать. Даже если значение атрибута типа записи отличается, остальные записи также должны быть в один и тот же день. Смотрите наглядное представление. Я пробовал это;

Map<LocalDate, List<Entity>> collection = entities.stream().collect(Collectors.groupingBy(Entity::getDate))
                .entrySet().stream().sorted(Map.Entry.comparingByKey()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new));

В моей реализации я могу собирать только по датам, но я хочу собирать по DateRange. Я хочу добиться чего-то вроде этого;

Map<DateRange, List<Entity>> collection = entities.stream()...// implementation

Entity

[
    {
        "id": 1,
        "date": "2020-01-01",
        "type": 5
    },
    {
        "id": 2,
        "date": "2020-01-01",
        "type": 5
    },
    {
        "id": 1,
        "date": "2020-01-02",
        "type": 5
    },
    {
        "id": 2,
        "date": "2020-01-02",
        "type": 5
    },
    .
    .
    .
]

Пример

Изменение диапазона дат на основе значения атрибута type. Например, если type = 5 для всех дат, значит, все записи должны быть в одном диапазоне. Допустим, есть записи только за один год, и я предполагаю, что есть только два уникальных значения идентификатора (id = 1, id = 2), поэтому в коллекции я должен добиться этого;

[{
    "From: 2020-01-01, To: 2020-12-31": [{
            "record1": 
                {
                    "id": 1,
                    "type": "5"
                },
            "record2": 
                {
                    "id": 2,
                    "type": "5"
                }
    }]
}]

Другой пример

Если type = 5 для всех дат, кроме '2020-02-01', а в '2020-02-01' type = 6 для id = 1, тогда диапазоны должны быть как показано ниже. Я все еще предполагаю, что есть записи только за один год и есть только два уникальных значения идентификатора (id = 1, id = 2).

[
{
    "From: 2020-01-01, To: 2020-01-31": [{
            "record1": 
                {
                    "id": 1,
                    "type": "5"
                },
            "record2": 
                {
                    "id": 2,
                    "type": "5"
                }
        }],
},
{
    "From: 2020-02-01, To: 2020-02-01": [{
            "record1": 
                {
                    "id": 1,
                    "type": "6"
                },
            "record2": 
                {
                    "id": 2,
                    "type": "5"
                }
        }],
},
{
    "From: 2020-02-02, To: 2020-12-31": [{
            "record1": 
                {
                    "id": 1,
                    "type": "5"
                },
            "record2": 
                {
                    "id": 2,
                    "type": "5"
                }
       }]
}
]
...