如何翻译Java8';从lambda到java 7?

如何翻译Java8';从lambda到java 7?,java,lambda,java-8,Java,Lambda,Java 8,在Java8中,我们有这样的lambda a.sort((v1, v2) -> {}); 在Java 7中如何实现此功能?在Java 8中,可以使用lambda表达式代替比较器对集合进行排序。传统上,您要么为要排序的类实现Comparable接口,并重写compareTo方法以显示对象的排序方式,要么调用Collections.sort传入集合和新的Comparator 我是Java8,您可以使用lambda表达式代替它。此示例有两个对象v1和v2。在您的示例中,没有实现如何比较这些对象

在Java8中,我们有这样的lambda

a.sort((v1, v2) -> {});

在Java 7中如何实现此功能?

在Java 8中,可以使用lambda表达式代替比较器对集合进行排序。传统上,您要么为要排序的类实现Comparable接口,并重写compareTo方法以显示对象的排序方式,要么调用Collections.sort传入集合和新的Comparator

我是Java8,您可以使用lambda表达式代替它。此示例有两个对象v1和v2。在您的示例中,没有实现如何比较这些对象

编辑:

一个例子

Java 8:

java.util.Random r = new java.util.Random();
ArrayList<TestClass> a = new ArrayList<>();
for( int i = 0; i < 10; i++ ){
    TestClass t = new TestClass();
    t.setValue(r.nextInt());
    a.add(t);
}

System.out.println("Before sort.");
a.sort((v1, v2) -> { return Integer.compare( v1.getValue(), v2.getValue()); });
a.forEach( x -> System.out.println("Value: " + x.getValue()));
java.util.Random r=new java.util.Random();
ArrayList a=新的ArrayList();
对于(int i=0;i<10;i++){
TestClass t=新的TestClass();
t、 setValue(r.nextInt());
a、 加(t);
}
System.out.println(“排序前”);
a、 排序((v1,v2)->{return Integer.compare(v1.getValue(),v2.getValue());});
a、 forEach(x->System.out.println(“值:+x.getValue());
相当于(在Java 7中):

java.util.Random r=new java.util.Random();
ArrayList a=新的ArrayList();
对于(int i=0;i<10;i++){
TestClass t=新的TestClass();
t、 setValue(r.nextInt());
a、 加(t);
}
System.out.println(“排序前”);
Collections.sort(一个新的Comparator(){
公共int比较(TestClass x,TestClass y){
返回整数.compare(x.getValue(),y.getValue());
}
});
对于(TestClass x:a){
System.out.println(“值:+x.getValue());
}

如您所见,Lambda表达式可以大大减少所需的代码行数。

它基本上可以转化为:

a.sort(新的比较器(){
公共整数比较(T v1,T v2){
返回0;
}
});

Java8引入了“lambda”概念,它允许您消除匿名子类语法(除其他外)。您可以阅读更多信息。

Java 8中引入的简写lambda表达式语法大致代表Java 7中的以下内容:

java.util.Random r = new java.util.Random();
ArrayList<TestClass> a = new ArrayList<>();
for( int i = 0; i < 10; i++ ){
    TestClass t = new TestClass();
    t.setValue(r.nextInt());
    a.add(t);
}

System.out.println("Before sort.");
Collections.sort(a, new Comparator<TestClass>(){
    public int compare(TestClass x, TestClass y) {
        return Integer.compare(x.getValue(), y.getValue());
    }

});
for(TestClass x : a){
    System.out.println("Value: " + x.getValue());
}
a.sort(new Comparator() {
    public int compare(Object v1, Object v2) {
        // ...
    }
}

请注意,我不知道
v1
v2
的类型,因此我将它们概括为
对象

与此问题相关的Java 7和8之间有两个区别

  • 在Java7中,
    List
    没有
    sort
    方法。您必须使用
    集合。排序
  • 在Java7中,lambda表达式(
    ->
    )不是语言的一部分
  • Java7的等价物是

    Collections.sort(list, new Comparator<Integer>() {
        @Override
        public int compare(Integer v1, Integer v2) {
            // Write what you need here.     
        }
    });
    
    Collections.sort(列表,新比较器(){
    @凌驾
    公共整数比较(整数v1,整数v2){
    //把你需要的写在这里。
    }
    });
    
    我想你说的是java 8是的……但是如果有人用java 7翻译给我,那就太好了:)如果我记得的话,java中的
    ->
    操作符本质上是新lambda表达式语法的一部分。它是在Java8中引入的,但我不知道它在Java7中是可用的。有人刚刚否决了所有4个答案。为什么?有时我在meta上读到人们对答案投反对票,以阻止人们回答不好的问题。虽然这并不是最糟糕的问题,但这里的情况可能很公平,但问题已经被编辑,所有提供的答案都符合简要说明。在我的书中有点苛刻,肯定有更好的方法去做?同意。我对问题进行了编辑,使其更具可读性和可理解性,并将答案应用于该问题。然而,我们可能永远也不知道是谁或为什么否决了答案。别担心,继续前进吧:-)