Java 8 Lambda 表达式

参考学习 http://www.runoob.com/java/java8-lambda-expressions.html

下面是使用 lambdas 来实现 Runnable 接口的示例:

1.1使用匿名内部类

new Thread(new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Hello world !");  
    }  
}).start();  

1.2使用 lambda expression

new Thread(() -> System.out.println("Hello world !")).start();  

2.1使用匿名内部类

Runnable race1 = new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Hello world !");  
    }  
};  

2.2使用 lambda expression

Runnable race2 = () -> System.out.println("Hello world !");  

直接调用 run 方法(没开新线程哦!)
race1.run();
race2.run();
Runnable 的 lambda 表达式,使用块格式,将五行代码转换成单行语句。 接下来,在下一节中我们将使用 lambdas 对集合进行排序。

使用 Lambdas 排序集合

在 Java 中,Comparator 类被用来排序集合。 在下面的例子中,我们将根据球员的 name、

surname、name 长度以及最后一个字母。 和前面的示例一样,先使用匿名内部类来排序,然后再使用 lambda 表达式精简我们的代码。

在第一个例子中,我们将根据name来排序list。 使用旧的方式,代码如下所示:

String[] players = {"Rafael Nadal", "Novak Djokovic",   
    "Stanislas Wawrinka", "David Ferrer",  
    "Roger Federer", "Andy Murray",  
    "Tomas Berdych", "Juan Martin Del Potro",  
    "Richard Gasquet", "John Isner"};  

1.1 使用匿名内部类根据 name 排序 players

Arrays.sort(players, new Comparator() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.compareTo(s2));  
    }  
});  

使用 lambdas,可以通过下面的代码实现同样的功能:

1.2 使用 lambda expression 排序 players

Comparator sortByName = (String s1, String s2) -> (s1.compareTo(s2));  
Arrays.sort(players, sortByName);  

1.3 也可以采用如下形式:

Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2)));  

其他的排序如下所示。 和上面的示例一样,代码分别通过匿名内部类和一些lambda表达式来实现Comparator :

1.1 使用匿名内部类根据 surname 排序 players

Arrays.sort(players, new Comparator() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.substring(s1.indexOf(" ")).compareTo(s2.substring(s2.indexOf(" "))));  
    }  
});  

1.2 使用 lambda expression 排序,根据 surname

Comparator sortBySurname = (String s1, String s2) ->   
    ( s1.substring(s1.indexOf(" ")).compareTo( s2.substring(s2.indexOf(" ")) ) );  
Arrays.sort(players, sortBySurname);  

1.3 或者这样,怀疑原作者是不是想错了,括号好多…

Arrays.sort(players, (String s1, String s2) ->   
      ( s1.substring(s1.indexOf(" ")).compareTo( s2.substring(s2.indexOf(" ")) ) )   
    );  

2.1 使用匿名内部类根据 name lenght 排序 players

Arrays.sort(players, new Comparator() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.length() - s2.length());  
    }  
});  

2.2 使用 lambda expression 排序,根据 name lenght

Comparator sortByNameLenght = (String s1, String s2) -> (s1.length() - s2.length());  
Arrays.sort(players, sortByNameLenght);  

2.3 or this

Arrays.sort(players, (String s1, String s2) -> (s1.length() - s2.length()));  

3.1 使用匿名内部类排序 players, 根据最后一个字母

Arrays.sort(players, new Comparator() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1));  
    }  
});  

3.2 使用 lambda expression 排序,根据最后一个字母

Comparator sortByLastLetter =   
    (String s1, String s2) ->   
        (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1));  
Arrays.sort(players, sortByLastLetter);  

3.3 or this

Arrays.sort(players, (String s1, String s2) -> (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1))); 

你可能感兴趣的:(Java)