如何将java 8的lambda翻译为java 7?

时间:2015-09-28 13:48:31

标签: java lambda java-8

在Java 8中,我们有像这样的lambdas

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

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

4 个答案:

答案 0 :(得分:5)

Java 7和8之间存在2个与此问题相关的差异。

  1. 在Java 7中,List没有sort方法。您必须使用Collections.sort
  2. 在Java 7中,lambda表达式(->)不是该语言的一部分。
  3. Java 7等价物是

    Collections.sort(list, new Comparator<Integer>() {
        @Override
        public int compare(Integer v1, Integer v2) {
            // Write what you need here.     
        }
    });
    

答案 1 :(得分:2)

它基本上转化为:

a.sort(new Comparator<T>(){
    public int compare(T v1, T v2){
        return 0;
    }
});

Java 8引入了“lambda”概念,它允许您消除匿名子类语法(以及其他内容)。您可以阅读更多相关信息here

答案 2 :(得分:1)

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

a.sort(new Comparator() {
    public int compare(Object v1, Object v2) {
        // ...
    }
}

请注意,我不知道v1v2的类型,因此我将其归纳为Object

答案 3 :(得分:0)

在java 8中,您可以使用lambda表达式代替Comparator来对集合进行排序。传统上,您要为要进行排序的类实现Comparable接口,并覆盖compareTo方法以显示对象的排序方式,或者调用Collections.sort传递到集合中以及新的Comparator。

我是java 8你可以在它的位置使用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 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());
}

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