記錄一次lambda表達式的轉換,本次記錄一種形式
補充引用文章
匿名內部類形式
DataStream<UserBehavior> pvData = timeData
.filter(
new FilterFunction<UserBehavior>() {
@Override
public boolean filter(UserBehavior userBehavior) throws Exception {
// 過濾出只有點擊的數據
return userBehavior.behavior.equals("pv");
}
}
);
轉lambda形式
DataStream<UserBehavior> pvData = timeData
.filter(
(UserBehavior userBehavior) -> userBehavior.behavior.equals("pv")
);
滿足以下條件的接口抽象方法,能寫成lambda表達式
1、接口只有一個抽象方法;
2、接口使用了@FunctionalInterface註解,該註解是個標誌性註解,用於聲明該接口是一個函數式接口,當然即使不使用這個註解,它依然是一個函數接口;
以上示例中的接口定義如下:
@FunctionalInterface
@Public
public interface FilterFunction<T> extends Function, Serializable {
boolean filter(T var1) throws Exception;
}
在java.util.function包預定下了大量函數式接口,典型的包含如下4類接口。
***Function:這類接口通常包含一個apply抽象方法,對參數進行處理轉換,然後返回一個新的值。
***Consumer:這類接口通常包含一個accept抽象方法,用於對參數進行處理,但是不返回一個新的值。
***Predicate:這類接口通常包含一個test抽象方方法,通過對參數的處理計算,然後返回一個boolean值
***Supplier:這類接口通常包含一個getAs***抽象方法,這種方法無參數,按照某種邏輯運算返回一個數據值。