记录一次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***抽象方法,这种方法无参数,按照某种逻辑运算返回一个数据值。