对字段的 lambda 引用



我想知道如何获取对字段的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()));

我认为这样称呼"方法引用"是有原因的,因此仅适用于方法。

最新更新