1. 程式人生 > >java8:lambda表示式強化練習

java8:lambda表示式強化練習

本篇部落格寫2個練習,鞏固下lambda表示式,如果你還不瞭解lambda,請看這http://blog.csdn.net/zhiwenyan/article/details/70478193

先介紹下函式式介面,以後的部落格會著重介紹。

什麼是函式式介面

  • 只包含一個抽象方法的介面,稱為函式式介面。
  • 可以通過 Lambda 表示式來建立該介面的物件。(若 Lambda表示式丟擲一個受檢異常,那麼該異常需要在目標介面的抽象方法上進行宣告)。
  • 我們可以在任意函式式介面上使用 @FunctionalInterface 註解, 這樣做可以檢查它是否是一個函式式介面,同時 javadoc 也會包含一條宣告,說明這個介面是一個函式式介面。

需求1:宣告一個函式式介面,對一個數運算,介面中的方法返回這個數的值

宣告一個函式式介面:

public interface myFunc {
    public Integer getValue(Integer num);
}
//宣告一個方法,使用介面作為引數
private Integer operation(int x, myFunc fun) {
    return fun.getValue(x);
}

使用Lambda的方式

Integer result = operation(100, x -> x * x);
System.out.println(result
);

使用匿名內部類

Integer res = operation(10, new myFunc() {
    @Override
    public Integer getValue(Integer num) {
        return num * num;
    }
});
System.out.println(res);

需求2:宣告一個函式式是介面,泛型的型別為<T,R>引數,R為返回值;介面宣告對應的抽象方法;宣告一個方法,使用介面作為引數,計算2個Long引數和的值。

// 宣告一個方法,使用介面作為引數
private void op(Long l1, Long l2, myFunc1<Long, Long> fun) {
    System.out
.println(fun.getValue(l1, l2)); } // 宣告一個函式是介面,泛型的型別為<T,R> 為引數,R為返回值;介面宣告對應的抽象方法 public interface myFunc1<T, R> { R getValue(T t1, T t2); }

使用Lambda的方式

op(100L, 100L, (l1, l2) -> l1 + l2);

使用匿名內部類

op(100L, 100L, new myFunc1<Long, Long>() {
    public Long getValue(Long t1, Long t2) {
        return t1+t2;
    };
});

Lambda表示式2個要素

1是->運算子前的引數;
2是->運算子後的功能;