yes*_*nes 6 java lambda java-8
我正在研究使用1.8对Java SE API所做的一些更改,我在查看新方法 Map.merge时,它显示了如何将其与行一起使用的示例
map.merge(key, msg, String::concat)
Run Code Online (Sandbox Code Playgroud)
我理解如何使用lambda表达式来创建匿名功能接口,但这似乎使用一个方法作为BiFunction.我喜欢理解和使用晦涩的java语法,但我无法在任何地方找到任何提及.
String::concat是concat()对String类的方法的引用.
A BiFunction是一个带有单个方法的函数接口,apply它接受两个参数(类型的第一个和类型T的第二个U),并返回类型的结果R
(换句话说,接口BiFunction<T,U,R>有一个方法R apply(T t, U u)).
map.merge期望a 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类型的结果.