#java #list #collections #lambda #java-stream
#java #Список #Коллекции #лямбда #java-stream
Вопрос:
Как это исправить?
Ошибка
карта (функция) в потоке не может быть применена к (лямбда-выражению>, лямбда-выражение>)
static class C {
int id;
public int getId() {
return id;
}
}
Map<Integer, C> c = Arrays.asList(new C()).stream().collect(Collectors.toMap(c -> c.getId(), c -> c));
Комментарии:
1. Это не так
map()
работает. Это не создаетMap
.2. да, пропущенный сбор.
Ответ №1:
Попробуйте это
Map<Integer, C> map = Arrays.asList(new C())
.stream()
.collect(Collectors.toMap(C::getId, c -> c));
То, что map делает в вашем примере, — это изменяет объект в потоке с одного объекта на другой. например, у вас есть поток C
объектов, а затем map(c -> c.getId())
измените его на поток Integers
. То, что вы искали, — это collect
функция, которая завершает поток и позволяет вам «собирать» его в любой объект, к которому вы пытаетесь добраться
Комментарии:
1.
Arrays.asList(new C()).stream().collect(Collectors.toMap(C::getId, Function.identity()));
2. Я всегда считал, что Function.identity намного более подробный, чем просто выполнение x -> x