一、常用函数式接口
JDK
提供了大量常用的函数式接口以丰富
Lambda
的典型使用场景,它们主要在
java.util.function
包中被提供。
下面是最简单的几个接口及使用示例。
#1.Supplier接口
java.util.function.Supplier<T>
接口仅包含一个无参的方法:
T get()
。用来获取一个泛型参数指定类型的对象数据。由于这是一个函数式接口,这也就意味着对应的Lambda
表达式需要
“
对外提供
”
一个符合泛型类型的对象数据。
import java.util.function.Supplier;
public class Demo08Supplier {
private static String getString(Supplier<String> function) {
return function.get();
}
public static void main(String[] args) {
String msgA = "Hello";
String msgB = "World";
System.out.println(getString(() ‐> msgA + msgB));
}
}
#1.2 练习:求数组元素最大值
使用
Supplier
接口作为方法参数类型,通过
Lambda
表达式求出
int
数组中的最大值。提示:接口的泛型请使用 java.lang.Integer 类。
public class Demo02Test {
//定一个方法,方法的参数传递Supplier,泛型使用Integer
public static int getMax(Supplier<Integer> sup){
return sup.get();
}
public static void main(String[] args) {
int arr[] = {2,3,4,52,333,23};
//调用getMax方法,参数传递Lambda
int maxNum = getMax(()‐>{
//计算数组的最大值
int max = arr[0];
for(int i : arr){
if(i>max){
max = i;
}
}
return max;
});
System.out.println(maxNum);
}
}
#2.Consumer接口
java.util.function.Consumer<T>
接口则正好与
Supplier
接口相反,它不是生产一个数据,而是
消费
一个数据,其数据类型由泛型决定。
疑问:什么是消费呢?