Ответ 1
Вы всегда можете использовать выражение лямбда:
return l.stream().collect(Collectors.toMap(a -> a.id, Function.identity()));
Я думаю, что "ссылки на методы" называются так по какой-то причине и поэтому применяются только для методов.
Я хотел бы знать, как получить привязку лямбды к полю. Я не хочу использовать метод, потому что мое поле является общедоступным. Я подозреваю, что это невозможно, но я не вижу очевидного заявления.
class A {
public final String id;
...
}
Map<String, A> f(List<A> l) {
return l.stream().collect(Collectors.toMap(A::id, Function.identity()));
}
Вы всегда можете использовать выражение лямбда:
return l.stream().collect(Collectors.toMap(a -> a.id, Function.identity()));
Я думаю, что "ссылки на методы" называются так по какой-то причине и поэтому применяются только для методов.
Похоже, вы надеетесь, что Java имеет соответствующую функцию для ссылок на поля, как это делается для ссылок на методы. Но это не так. Ссылки на методы являются сокращением для определенной категории лямбда-выражений, но для полей не существует соответствующего синтаксиса. Полевые литералы были исследованы во время обсуждения экспертной группы JSR-335 (здесь есть некоторые ссылки http://mail.openjdk.java.net/pipermail/lambda-dev/2011-November/004235.html), но они не были включены в Java SE 8.