Java 8 lambda表達式

一、在JDK8以前,Java是不支持函數式編程的java

  • 函數編程,便可理解是將一個函數(也稱爲「行爲」)做爲一個參數進行傳遞
  • 面向對象編程是對數據的抽象(各類各樣的POJO類)
  • 函數式編程則是對行爲的抽象(將行爲做爲一個參數進行傳遞)

二、認識Lambda表達式編程

傳統方法:ide

  • 帶來許多沒必要要的「樣板代碼」
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello World!");
    }
});

Lambda表達式一句話就夠了:函數式編程

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

三、舉例:函數

  • 只要是一個接口中只包含一個方法,則能夠使用Lambda表達式,這樣的接口稱之爲「函數接口」
/**
 * 函數接口:只有一個方法的接口。做爲Lambda表達式的類型
 * Created by Kevin on 2018/2/17.
 */
public interface FunctionInterface {
    void test();
}

/**
 * 函數接口測試
 * Created by Kevin on 2018/2/17.
 */
public class FunctionInterfaceTest {

    @Test
    public void testLambda() {
        func(new FunctionInterface() {
            @Override
            public void test() {
                System.out.println("Hello World!");
            }
        });
        //使用Lambda表達式代替上面的匿名內部類
        func(() -> System.out.println("Hello World"));
    }

    private void func(FunctionInterface functionInterface) {
        functionInterface.test();
    }
}

四、包含參數測試

  • 參數類型能夠不指明(建議任何狀況下都指明)
/**
 * 函數接口測試
 * Created by Kevin on 2018/2/17.
 */
public class FunctionInterfaceTest {

    @Test
    public void testLambda() {
        //使用Lambda表達式代替匿名內部類
        func((x) -> System.out.println("Hello World" + x));
    }

    private void func(FunctionInterface functionInterface) {
        int x = 1;
        functionInterface.test(x);
    }
}

五、函數接口是一個泛型,不能推導出參數類型code

/**
 * 函數接口:只有一個方法的接口。做爲Lambda表達式的類型
 * Created by Kevin on 2018/2/17.
 */
public interface FunctionInterface<T> {
    void test(T param);
}

六、帶參數帶返回值對象

func((Integer x) -> {
    System.out.println("Hello World" + x);
    return true;
});

七、Lambda 表達式,更大的好處則是集合API的更新,新增的Stream類庫接口

  • 遍歷使用集合時再也不像以往那樣不斷地使用for循環

以前代碼:get

for (Student student : studentList) {
    if (student.getCity().equals("chengdu")) {
        count++;
    }
}

JDK8使用集合的正確姿式:

count = studentList.stream().filter((student -> student.getCity().equals("chengdu"))).count();
相關文章
相關標籤/搜索