java8:lambda表示式強化練習
阿新 • • 發佈:2018-12-17
本篇部落格寫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是->運算子後的功能;