我想知道如何获取对字段的lambda引用。我不想使用方法,因为我的字段是公共最终的。我怀疑这是不可能的,但我没有看到一个明显的陈述。
class A {
public final String id;
...
}
Map<String, A> f(List<A> l) {
return l.stream().collect(Collectors.toMap(A::id, Function.identity()));
}
听起来你希望Java对字段引用有一个相应的功能,就像它对方法引用一样。 但事实并非如此。 方法引用是特定类别的 lambda 表达式的简写,但没有相应的字段语法。 在JSR-335专家组审议期间,对字段文字进行了探索(http://mail.openjdk.java.net/pipermail/lambda-dev/2011-November/004235.html 这里有一些参考资料),但没有包含在Java SE 8中。
您始终可以使用 lambda 表达式:
return l.stream().collect(Collectors.toMap(a -> a.id, Function.identity()));
我认为这样称呼"方法引用"是有原因的,因此仅适用于方法。