У меня есть список объектов List<FloatBalance>
, который может быть представлен следующим JSON. Я хочу получить наибольшую последнюю запись для каждой валюты в списке и передать сокращенный список обратно на запрос.
{
"id": 1,
"clientId": 50,
"currency": "GBP",
"floatType": "ChargeFloat",
"floatCurrentValue": 300.00,
"chargeReference": "PROD-1578486576_278",
"cashOutReference": null,
"cashInReference": null,
"targetValue": 3000.00,
"alertValue": 500.00,
"maxValue": 4500.00,
"createdDate": "2020-01-08T12:29:50Z"
},
...
]
Моя первая попытка - прямая теперь я группирую их по валюте с
Map<String, List<FloatBalance>> result = floats.stream()
.collect(groupingBy(FloatBalance::getCurrency));
, а затем группирую их и упорядочиваю по самым последним датам с
Map<String, List<FloatBalance>> floatGrouped = floats.stream()
.sorted(Comparator.comparing(FloatBalance::getCreatedDate).reversed())
.collect(groupingBy(FloatBalance::getCurrency));
Результат карты
Я также могу сократить список, но мне удалось выполнить эту операцию только в полном списке, который возвращает только самую последнюю запись.
FloatBalance floatGrouped = floats.stream()
.sorted(Comparator.comparing(FloatBalance::getCreatedDate))
.reduce((first, second) -> second)
.orElse(null);
Я ходил кругами, пытаясь это выяснить, я пытался .entrySet()
выполнять уменьшение для каждой записи на карте, но компьютер говорит «нет» всему, что я пробовал.
В идеале я хочу перезапустить самую последнюю запись для каждой валюты в качестве ответа системы.