преобразовать список объектов во вложенную карту в Java 8 - PullRequest
0 голосов
/ 24 июня 2019

У меня есть список объектов следующим образом:

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.
)))

1 Ответ

1 голос
/ 24 июня 2019

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>>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...