将 java 8 lambda 表达式转换为在 java 7 中工作
Converting java 8 lambda expression to work in java 7
尝试转换这部分代码以摆脱 lambda 表达式,以便它能够在 java 7
中工作
System.out.println(nicksGraph.findPath(nicksGraph.nodeWith(new Coordinate(0,0)), (a->a.getX()==3 && a.getY()==1), new PriorityQueue<Node<Coordinate>, Integer>(funcTotal)));
我环顾四周,但也许我只是没有正确理解它。
在 Java8 中,lambda 表达式替代了实现函数式接口的匿名内部 class。看起来您在这里使用的是 Predicate
,因为表达式是 boolean
.
Predicate
interface是在Java8中引入的,需要自己重新创建。您将无法创建 default
或 static
方法,因此只需保留功能接口方法即可。
public interface Predicate<T>
{
public boolean test(T t);
}
然后,将 lambda 表达式替换为匿名 class 声明。
System.out.println(nicksGraph.findPath(
nicksGraph.nodeWith(new Coordinate(0,0)),
// Replacement anonymous inner class here.
new Predicate<Coordinate>() {
@Override
public boolean test(Coordinate a) {
// return the lambda expression here.
return a.getX()==3 && a.getY()==1;
}
},
new PriorityQueue<Node<Coordinate>, Integer>(funcTotal)));
findPath 需要一个 Predicate 作为第二个参数。您可以将 lambda 替换为
new Predicate<>(){
public boolean test(Integer i){
return a.getX() == 3 && a.getY() == 1;
}
}
但主要问题只是 Predicate
本身的可用性,因为它是一个 java8 功能。此代码不会在 java7 中 运行,无论您是否使用 lambda。
看看Retrolambda。
它是 Java 8 的 lambda 表达式向 Java 7、6 和 5 的反向移植。
Just as there was Retroweaver et al. for running Java 5 code with
generics on Java 1.4, Retrolambda lets you run Java 8 code with lambda
expressions, method references and try-with-resources statements on
Java 7, 6 or 5. It does this by transforming your Java 8 compiled
bytecode so that it can run on an older Java runtime
尝试转换这部分代码以摆脱 lambda 表达式,以便它能够在 java 7
中工作System.out.println(nicksGraph.findPath(nicksGraph.nodeWith(new Coordinate(0,0)), (a->a.getX()==3 && a.getY()==1), new PriorityQueue<Node<Coordinate>, Integer>(funcTotal)));
我环顾四周,但也许我只是没有正确理解它。
在 Java8 中,lambda 表达式替代了实现函数式接口的匿名内部 class。看起来您在这里使用的是 Predicate
,因为表达式是 boolean
.
Predicate
interface是在Java8中引入的,需要自己重新创建。您将无法创建 default
或 static
方法,因此只需保留功能接口方法即可。
public interface Predicate<T>
{
public boolean test(T t);
}
然后,将 lambda 表达式替换为匿名 class 声明。
System.out.println(nicksGraph.findPath(
nicksGraph.nodeWith(new Coordinate(0,0)),
// Replacement anonymous inner class here.
new Predicate<Coordinate>() {
@Override
public boolean test(Coordinate a) {
// return the lambda expression here.
return a.getX()==3 && a.getY()==1;
}
},
new PriorityQueue<Node<Coordinate>, Integer>(funcTotal)));
findPath 需要一个 Predicate 作为第二个参数。您可以将 lambda 替换为
new Predicate<>(){
public boolean test(Integer i){
return a.getX() == 3 && a.getY() == 1;
}
}
但主要问题只是 Predicate
本身的可用性,因为它是一个 java8 功能。此代码不会在 java7 中 运行,无论您是否使用 lambda。
看看Retrolambda。 它是 Java 8 的 lambda 表达式向 Java 7、6 和 5 的反向移植。
Just as there was Retroweaver et al. for running Java 5 code with generics on Java 1.4, Retrolambda lets you run Java 8 code with lambda expressions, method references and try-with-resources statements on Java 7, 6 or 5. It does this by transforming your Java 8 compiled bytecode so that it can run on an older Java runtime