У меня есть список объектов следующим образом:
Rating {
Long id;
String aRating;
String bRating;
Date date;
//getters and Setters
}
List<Rating> list = //list with some values in it.
Мне нужно преобразовать приведенный выше список во вложенную карту:
Map<Date, Map<CustomEnum, String>>
Enum CustomEnum {
aRatingEnum("aRating", "someValue");
bRatingEnum("bRating", "someValue");
}
предположим, что список содержит следующие значения:
Id, Date, aRating, bRating
1 , 2/2/2019, A+, B+
2, 2/2/2018, A, B
то это необходимо преобразовать в следующую карту:
Map = {2/2/2019 = {aRatingEnum=A+, bRatingEnum=B+}, 2/2/2018 = {aRatingEnum=A, bRatingEnum=B}}
Я пробовал использовать Java 8:
list.stream().collect(Collectors.groupingBy(x->x.getDate(), Collectors.toMap(
//here I am not able to proceed further how should I approach please help.
)))




toMap собирает несколько предметов в одну коллекцию. У вас есть один объект (Rating), и вы хотите создать из него Map.
Я думаю, что вам нужно collectingAndThen, которое позволяет вам группировать по дате, а затем выполнять перенос на Map в отделке Function.
list.stream()
.collect(Collectors.collectingAndThen(
Collectors.groupingBy(x->x.getDate(),
lr -> {
Map<CustomEnum, String> result = new EnumMap<>();
Rating r = lr.get(0); // take first rating for that date
result.put(CustomEnum.aRatingEnum, r.getARating());
result.put(CustomEnum.bRatingEnum, r.getBRating());
return result;
})));
Или преобразуйте эту лямбду в метод или используйте Map.of, если вы используете Java 9 или выше.
Это даст вам Map<Date, Map<CustomEnum, String>>.
но я хочу только вложенную карту, а не список, разве это невозможно? кроме того, спасибо за ваш ответ.
@ghufranne Список создан, потому что у вас может быть более одного Rating на дату. Вам придется решить, как обращаться с несколькими рейтингами.
@ghufranne нет в объекте, но у вас может быть несколько объектов на одну и ту же дату в списке, который вы транслируете. Но я все равно ошибся, я отредактирую, чтобы финишер использовал только первый объект.
лр.получить (0); неверно, lr будет картой списка, результатом группировки по..
Enum предназначен для понимания, код не копируется,