我正在查看使用1.8对Java SE API所做的一些更改,我在查看新方法Map.merge时会显示如何将其与行一起使用的示例
map.merge(key, msg, String::concat)
我理解如何使用lambda表达式来创建匿名功能接口,但这似乎使用了一个方法作为BiFunction。我喜欢理解和使用晦涩的java语法,但我无法在任何地方找到任何提及。
答案 0 :(得分:5)
String::concat
是对String类的concat()
方法的引用。
BiFunction
是一个带有单个方法apply
的函数接口,它接受两个参数(第一个类型为T
,第二个类型为U
),并返回R
类型的结果
(换句话说,界面BiFunction<T,U,R>
有一个方法R apply(T t, U u)
)。
map.merge
期望BiFunction<? super V,? super V,? extends V>
作为第三个参数,其中V
是Map
的值。如果您的Map
值为String
,则可以使用任何接受两个String
参数的方法并返回String
。
String::concat
满足这些要求,这就是为什么可以在map.merge
中使用它。
满足这些要求的原因需要解释:
String::concat
的签名是public String concat(String str)
。
这可以看作是一个函数,它有两个String类型的参数(this
,这个方法被调用的实例,以及str
参数)和String类型的结果。