Агрегировать данные по дате в потоке JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Агрегировать данные по дате в потоке Java

Сообщение Anonymous »

У меня есть список элементов статистики (String context, Integer numberOfHits, String yyyyMM).
Пример экземпляра: context=WEBSITE, NumberOfHits=12456, yyyyMM="2019-06".

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

Я пробую такой код, но не могу заполнить пробелы:

Map collect =
list.stream()
.sorted((s1, s2) -> s1.getYearAndMonth().compareTo(s2.getYearAndMonth()))
./* TODO: What method ? */((s1, s2) -> s1.getYearAndMonth().equals(s2.getYearAndMonth())
? new StatisticsItem(s1.getNumberOfHits() + s2.getNumberOfHits(), s1.getYearAndMonth()) // Construct new StatistictsItem without "context"
: /* TODO: don't touch data with different dates */)
.collect(Collectors.toMap(s -> s.getYearAndMonth(), s -> s.getNumberOfHits()));


Ввод:

{context="WEBSITE", numberOfHits=500, yyyyMM="2019-04",
context="WEBSITE", numberOfHits=750, yyyyMM="2019-05",
context="WEBSITE", numberOfHits=470, yyyyMM="2019-06",
context="REST", numberOfHits=5400, yyyyMM="2019-04",
context="REST", numberOfHits=4700, yyyyMM="2019-05",
context="REST", numberOfHits=9700, yyyyMM="2019-06"}


Желаемый результат (в данном случае контекст может быть нулевым или любым другим):

{context=null, numberOfHits=5900, yyyyMM="2019-04",
context=null, numberOfHits=5450, yyyyMM="2019-05",
context=null, numberOfHits=10170, yyyyMM="2019-06"}


Подробнее здесь: https://stackoverflow.com/questions/568 ... ava-stream
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»