将java 8 lambda表达式转换为在java 7中工作

shm*_*ink 6 java lambda

试图转换这部分代码以摆脱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)));
Run Code Online (Sandbox Code Playgroud)

我环顾四周,但也许我只是没有正确理解它.

rge*_*man 10

在Java 8中,lambda表达式是实现功能接口的匿名内部类的替代.看起来你在这里使用a Predicate,因为表达式是a boolean.

Predicate接口是在Java 8中引入的,因此您需要自己重新创建它.您将无法创建defaultstatic方法,因此请保留功能接口方法.

public interface Predicate<T>
{
    public boolean test(T t);
}
Run Code Online (Sandbox Code Playgroud)

然后,使用匿名类声明替换lambda表达式.

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)));
Run Code Online (Sandbox Code Playgroud)