Подтвердить что ты не робот

Ссылка Lambda на поле

Я хотел бы знать, как получить привязку лямбды к полю. Я не хочу использовать метод, потому что мое поле является общедоступным. Я подозреваю, что это невозможно, но я не вижу очевидного заявления.

class A {
   public final String id;
   ...
}

Map<String, A> f(List<A> l) {
   return l.stream().collect(Collectors.toMap(A::id, Function.identity()));
}
4b9b3361

Ответ 1

Вы всегда можете использовать выражение лямбда:

return l.stream().collect(Collectors.toMap(a -> a.id, Function.identity()));

Я думаю, что "ссылки на методы" называются так по какой-то причине и поэтому применяются только для методов.

Ответ 2

Похоже, вы надеетесь, что Java имеет соответствующую функцию для ссылок на поля, как это делается для ссылок на методы. Но это не так. Ссылки на методы являются сокращением для определенной категории лямбда-выражений, но для полей не существует соответствующего синтаксиса. Полевые литералы были исследованы во время обсуждения экспертной группы JSR-335 (здесь есть некоторые ссылки http://mail.openjdk.java.net/pipermail/lambda-dev/2011-November/004235.html), но они не были включены в Java SE 8.