lamdba表达式的语法

  lamdba表达式是一个可传递的代码块,可以在以后执行一次或者多次。下面我们先来看看一个简单的lamdba表达式:

(String first,String second)->first.length()-second.length();

  这里是一个简单的lamdba表达式。lamdba表达式就是一个代码块,以及必须传入代码的变量规范。带参数变量的表达式被称为lamdba表达式。

  你已经见过Java中的lamdba表达式形式:参数,箭头(->)以及一个表达式。如果代码要完成的计算无法放在一个表达式中,就可以想写方法一样,把这些代码放在{}中,并包含显式的return语句。例如:

(String first,String second)->{
    if(first.length()<second.length()) return -1;
    else if(first.length()>second.length()) return 1;
    else return 0;
}

  即使lamdba表达式没有参数,仍然要提供空括号,就像空参方法一样。

()->{
    for(int i=0;i<10;i++) System.out.println(i);
}

  如果可以推导出一个lamdba表达式的参数类型,则可以忽略其类型。
如果方法只有一个参数,而且这个参数的类型可以推倒得出,那么甚至可以忽略小括号:

ActionListener listener = event ->
.println("The time is " + new Date()"); System.out
// Instead of (event) -> . . . or (ActionEvent event) -> . . .

  无需指定 lambda 表达式的返回类型。 lambda 表达式的返回类型总是会由上下文推导得 出。 例如, 下面的表达式
(String first, String second) -> first.lengthO - second.lengthO
可以在需要 int类型结果的上下文中使用。

  注释: 如果一个 lambda 表达式只在某些分支返回一个值, 而在另外一些分支不返回值, 这是不合法的。 例 如,(int x) -> { if (x >= 0) return 1; } 就不合法。

  下面的程序显示了如何在一个比较器和一个动作监听器中使用 lambda 表达式。

package lambda;
 import java.util.*;
 import javax.swing.*;
 import javax.swing.Timer;
 /**
 * This program demonstrates the use of lambda expressions.
 * ©version 1.0 2015-05-12
 * ©author Cay Horstmann
 */
public class LambdaTest{
    public static void main(String[] args){
        String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune" };
        System.out.println (Arrays.toString (planets)) ;
        System.out.println("Sorted in dictionary order:");
        Arrays.sort(pianets);
        System.out.println (Arrays.toStri ng(pianets)) ;
        System.out.println("Sorted by length:");
        Arrays,sort(pianets, (first, second) -> first.lengthO - second.lengthO); System.out.println(Arrays.toString(pianets));
        Timer t = new Timer(1000, event -> System,out.println("The time is " + new Date()));
        t .start () ;
        // keep program running until user selects "0k" JOptionPane.showMessageDialog(nul1, "Quit program?"); System.exit (O) ;
    }
}

你可能感兴趣的:(Java核心技术)