Lambda 表达式允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

语法

lambda 表达式的语法格式如下:

(parameters) -> expression  
或  
(parameters) ->{ statements; }

以下是lambda表达式的重要特征:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。

主要还是贴几个例子,加深自己的理解

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * jdk 1.8 新特性
 * Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
 * lambda 表达式的语法如下:
 * (parameters) -> expression
 * 或
 * (parameters) ->{ statements; }
 *
 * 可以把 Lambda 表达式理解为是一段可以传递的代码(将代码作为实参),
 * 也可以理解为函数式编程,将一个函数作为参数进行传递。
 *
 */
public class jdkNewFuture {
    public static void main(String[] args) {
        List<String> names1 = new ArrayList<>();
        names1.add("Gooogle");
        names1.add("Runoob");
        names1.add("Taobao");
        names1.add("Baidu");
        names1.add("Sina");
        System.out.println("使用jdk7实现排序");
        sortByJdk7Grammer(names1);
        for (String name:names1){
            System.out.println(name);
        }

        System.out.println("使用jdk8实现排序");
        List<String> names2 = new ArrayList<>();
        names2.add("Gooogle");
        names2.add("Runoob");
        names2.add("Taobao");
        names2.add("Baidu");
        names2.add("Sina");
        sortByJdk8Grammer(names2);
        for (String name:names2){
            System.out.println(name);
        }
        /**
         * 使用匿名内部类新建线程
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程1,基于匿名内部类的线程已经新建!");
            }
        }).start();
        /**
         * 使用labmda表达式新建线程:从上面的正常建立方法可以看出来
         * new Thread() 括号里需要传递的是一个Runnable()类型的对象,
         * 这个对象没有需要传递进去的参数,所以lambda表达式的格式的开头是 ()->
         * 然后是{},他的具体逻辑为 执行System.out.println() 操作
         * 所以写好之后是() -> System.out.println("线程2,基于lambda表达式的线程已经新建!")
         * 将这段代码作为 new Thread 的参数
         */
        new Thread(()-> System.out.println("线程2,基于lambda表达式的线程已经新建!")).start(); 
    }

    /**
     * 使用jdk7 实现排序,即重写compare方法
     * @param names
     */
    private static void sortByJdk7Grammer(List<String> names){
        Collections.sort(names, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
    }

    /**
     * 使用lambda表达式 重写排序方法
     * 参数为(s1,s2)
     * 代码执行的逻辑为 s1.compareTo(s2)
     * 所以修改成lambda表达式之后为(s1,s2)->s1.compareTo(s2)
     * @param names
     */

    private static void sortByJdk8Grammer(List<String> names){
        Collections.sort(names,(s1,s2)->s1.compareTo(s2));
    }

}