Можно ли вернуть другую функцию в лямбда-выражении в java? Скажем, у меня есть следующие лямбда-выражения
addFive = (x) -> x+5;
addFiveIfPositive = (y) -> {
if (y > 0) return addFive;
else return y;
};
Чтобы дать некоторый контекст позади, я спрашиваю это, я работаю с лямбда-выражениями, чтобы определить компараторы, и для некоторых компараторов, я хочу «связать» компараторы, которые Я уже определил не писать тот же код снова, учитывая некоторые условия, как в примере выше.
Любая помощь будет оценена.
Редактировать: Это более представительный пример того, что Я работаю с
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>