最近在公司改造接口的时候,看到了前辈写的lambda表达式,有些地方不是很理解,于是去查找学习了一下,打算开个帖子记录一下。帮助理解
我之前对于lambda表达式的理解还停留在Runnable接口的匿名对象以及Comparator比较器的lambda简写上,对于supplier function consumer等接口完全不了解
这里参考了
Java Lambda基础——Function, Consumer, Predicate, Supplier, 及FunctionalInterface接口 - Morven.Huang - 博客园
1.Supplier:只有一个get方法需要实现 符合lambda表达式的自动判定习惯
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
在lambda代码块里面返回的值即为get的返回值
2.Function:apply方法需要实现
public interface Function<T, R> {
/**
* Applies this function to the given argument.
*
* @param t the function argument
* @return the function result
*/
R apply(T t);
}
输入一个变量 经过apply逻辑处理后返回一个值
以Function<GetUserBaseSummaryInfoResponseType, UserHomePage> responseHandler为例
这里的Handler是将传入的UserHomePage变量处理后返回一个GetUserBaseSummaryInfoResponseType变量结果
Test:
public class FunctionTest {
public static void main(String[] args) {
Function<Integer,Integer> addHandler = (a)->{
return a+10;
};
//返回15
System.out.println(addHandler.apply(5));
}
}
3.Consumer 传入一个参数 无返回值
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
}
总结:
supplier:顾名思义 提供者 无参数 有返回值
function:函数 有参数 有返回值
consumer: 消费者 有参数 无返回值