java的lambda表達式


  • java lambda表達式可以代替匿名內部類,一個經典的例子是多線程的Thread類,構造函數中的runnable接口中的run方法可以用lambda表達式代替
    之前:
   @Test
    public void oldRunable() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("The old runable now is using!");
            }
        }).start();
    }

之后:

    @Test
    public void runable() {
        new Thread(() -> System.out.println("It's a lambda function!")).start();
    }
  • 可以將lambda表達式理解為匿名函數
  • Lambda表達式能夠讓程序員的編程更加高效
  • Lambda表達式的語法:
    ([Lambda參數列表,即形參列表]) ->
  • Lambda表達式的分類
  • 無參無返回值
	public class TestLambda {
    public static void main(String[] args) {
        new Thread(() -> System.out.println("Hello"));
    }
}
  • 有參無返回值
public class TestLambda {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("AAAAA");
        list.add("BBBBB");
        list.add("CCCCC");
        list.add("DDDDD");
//形參的類型是確定的,可省略;只有一個形參,()可以省略;
        list.forEach(t -> System.out.print(t + "\t"));
//或者更簡潔的方法引用:list.forEach(System.out::println);
        //打印結果:AAAAA	BBBBB	CCCCC	DDDDD
    }
}
  • 有參有返回值
  • 無參有返回值
  • 每一個Lambda表達式能隱式的給函數式接口賦值,如runnable例子中lambda將打印方法傳遞給runnable接口的run()方法
  • 自定義函數接口
package com.isea.java;
@FunctionalInterface
public interface IMyInterface {
    void study();
}
 
package com.isea.java;
public class TestIMyInterface {
    public static void main(String[] args) {
        IMyInterface iMyInterface = () -> System.out.println("I like study");
        iMyInterface.study();
    }
}//這里的Lambda表達式將方法體賦值給函數式接口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM