Java 8: преобразовать список POJO в map — ID-POJO = map (функция) в потоке не может быть применен к (, )

#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