【发布时间】:2020-03-12 17:12:17
【问题描述】:
是否可以在 java 的 lambda 表达式中返回另一个函数?假设我有以下 lambda 表达式
addFive = (x) -> x+5;
addFiveIfPositive = (y) -> {
if (y > 0) return addFive;
else return y;
};
为了给出我问这个问题的背景,我正在使用 lambda 表达式来定义比较器,对于一些比较器,我想“链接”我已经定义的比较器,以便不再编写相同的代码,给定上例中的一些条件。
任何帮助将不胜感激。
编辑: 这是我正在使用的更具代表性的示例。
import java.util.Comparator;
class Random{
Integer val;
String str;
Random(int val, String str){
this.val = new Integer(val);
this.str = str;
}
}
public class Temp{
static Comparator<Random> c1 = (r1, r2) -> (r1.val).compareTo((r2.val));
static Comparator<Random> c2 = (r1, r2) -> {
if ((r1.str).compareTo((r2.str)) == 0){
return c1.apply(r1,r2);
}
return (r1.str).compareTo((r2.str));
};
public static void main(String args){
Random rand1 = new Random(1, "Hello");
Random rand2 = new Random(2, "Hello");
System.out.println(c2.compare(rand1, rand2));
}
}
使用 .apply() 给我错误
Temp.java:18: error: cannot find symbol
return c1.apply(r1,r2);
^
symbol: method apply(Random,Random)
location: variable c1 of type Comparator<Random>
【问题讨论】:
-
将
.apply(y)添加到return addFive的末尾 -
编译器在我尝试的时候给出了找不到方法apply()的错误。
-
该编辑完全改变了问题...
Comparator不是函数,因此它没有apply方法;它有一个compare(Object, Object)方法,那是你需要调用的。
标签: java lambda comparator