java 实战 8 - lambdas 和方法引用等价物

标签 java lambda method-reference

根据实际中的 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;

请帮助我了解我所缺少的东西!谢谢

最佳答案

不清楚是什么s1s1::substring .如果s1String实例并且您尝试为特定的 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/

相关文章:

java - 使用 Spring Batch 写入多个文件

java - 编译器生成的相对地址以及它们如何在(最好是 java)字节码中表示?

java - 如何在操作书中的 mahout 中运行示例

java - 对返回接口(interface)的方法的静态引用(with::)

java - 方法引用转换如何工作?

java - 参数与字段

c# - 如何在linq中加入连续的日期范围

c++ - 语法繁重的多个 lambda 包装器的替代方案——如何避免样板代码?

python - 在python中将函数作为参数传递

java - BiConsumer和一个参数的方法引用