根据实际中的 Java 8,
(str, i) -> str.substring(i) 等价于方法引用String::substring
我的代码如下..
使用 Lambda,
String s = "HELLO WORLD";
BiFunction<String, Integer, String> biFunc = (String s, Integer i) -> s.substring(i);
方法引用
但是下面的代码给出了编译时错误说无法解析方法子字符串
BiFunction<String, Integer, String> biFunc1 = s1::substring;
请帮助我了解我所缺少的东西!谢谢
最佳答案
不清楚是什么s1
在s1::substring
.如果s1
是 String
实例并且您尝试为特定的 String
创建方法引用例如,该方法引用与 BiFunction
不匹配功能接口(interface),因为调用biFunc1.apply()
要求您提供 String
和一个 Integer
, 但您已经提供了具体的 String
方法引用中的实例 s1::substring
.
另一方面,s1::substring
匹配Function<Integer,String>
功能接口(interface)。
创建 BiFunction
所需类型的,使用非特定实例的方法引用:
BiFunction<String, Integer, String> biFunc1 = String::substring;
例子:
String s1 = "abcde";
Function<Integer,String> func1 = s1::substring;
String sub1 = func1.apply(3); // always applied on the same String
BiFunction<String, Integer, String> biFunc1 = String::substring;
String sub2 = biFunc1.apply(s1,3); // applied on whichever String you supply
关于java 实战 8 - lambdas 和方法引用等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51056079/