Инициализировать карту из набора - PullRequest
4 голосов
/ 25 января 2020

У меня есть набор ученика - Set<Student> students

class Student{
    String Id;
    String getId(){ return Id;} 
.....
}

Я пытаюсь инициализировать Map<String,List<StudentResult>> с помощью записей из набора выше:

Map<String,List<StudentResult>> studentResultMap = students.keySet().stream().collect(
                                                Collectors.toMap(x -> x.getId(),new ArrayList<StudentResult>()));

Но это не не скомпилировать - как этого достичь?

Ответы [ 2 ]

5 голосов
/ 25 января 2020

Здесь кроется ваша проблема:

Map<String,List<StudentResult>> studentResultMap = students
    .stream().collect(Collectors.toMap(x -> x.getId(), new ArrayList<StudentResult>()));

Вам нужно передать две функции Collectors.toMap, но вместо этого вы передаете экземпляр List в качестве второго параметра

Map<String,List<StudentResult>> studentResultMap = students
    .stream().collect(Collectors.toMap(x -> x.getId(), x -> new ArrayList<StudentResult>()));
5 голосов
/ 25 января 2020

new ArrayList<StudentResult>() не дает правильного аргумента для параметра Function.

Вам необходимо использовать:

x -> new ArrayList<StudentResult>()

Примечание: students.keySet() willn ' или скомпилировать, если students является Set. На него можно позвонить stream напрямую:

students.stream().collect(Collectors.toMap(x -> x.getId(), 
                                           a -> new ArrayList<>()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...