JDK1.8新特性--Lambda表示式

suixinghero發表於2020-01-04
 /* 一、Lambda 表示式的基礎語法:Java8中引入了一個新的操作符“->”
 *     該操作符為箭頭操作符或Lambda操作符,箭頭操作符將Lambda表示式
 *     拆分成兩部分
 * 左側:Lambda 表示式的引數列表
 * 右側:Lambda表示式中所需執行的功能,即Lambda體
 * 
 * 語法:
 * 語法格式一:無參無返回值
 *    ()->System.out.println("Hello World");
 * 語法二:有一個引數,並且無返回值
 *    (x)-> System.out.println(x)
 * 語法三:若有一個引數,小括號可以不寫
 *     x-> System.out.println(x)
 * 語法四:有兩個以上的引數,並且 Lambda 體中有多條語句,有返回值
 *     (x,y)->{
 *                 System.out.println("Hello World");
 *                  return Integer.compare(x,y);
 *             };
 * 語法格式五:若 Lambda 體只有一條return語句,那麼大括號和return都可以 不寫
 *       (x,y)->Integer.compare(x,y);
 * 語法格式六:lambda 表示式的引數列表的資料型別可以省略不寫,因為JVM編譯器會
 *             通過上下文推斷出資料型別,即型別推斷;  
 */           
  public class TestLambda2{
    //語法格式一:無參無返回值
    @Test
    public void test1(){
        int num=0;//jdk1.7在匿名內部類中呼叫區域性變數需要加final
        //jdk1.8之後,預設新增
        Runnable runnable=new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello World");
            }
        };
        System.out.println("**********");
        Runnable runnable1=()-> System.out.println("Hello World");
    }
    //語法二:有一個引數,並且無返回值
    @Test
    public void test2(){
        Consumer<String> consumer=(x)-> System.out.println(x);
        consumer.accept("Hello World");
    }
    //語法四:有兩個以上的引數,並且 Lambda 體中有多條語句,有返回值
    @Test
    public void test3(){
        Comparator<Integer> comparator=(x,y)->{
            System.out.println("Hello World");
            return Integer.compare(x,y);
        };
    }

     //語法格式五:若 Lambda 體只有一條return語句,那麼大括號和return都可以不寫
    @Test
    public void test4(){
        Comparator<Integer> comparator=(x,y)->Integer.compare(x,y);
    }
}


 /* 二、Lambda  表示式需要“函式式介面”的支援
 * 函式式介面:介面中只有一個抽象方法的介面,稱為函式式介面。可以使用註解
 *           @FunctionalInterface
 * java1.8  內建的四大核心函式式介面
 *
 * Consumer<T>:消費性介面
 *            void accept(T t);
 * Supplier<T>:供給性介面
 *            T get();
 * Function<T,R>:函式型介面
 *            R apply(T t);
 * Predicate<T>:斷言型介面
 *            boolean test(T t);
 */

相關文章