上一篇博客已经介绍了自定义函数式接口,然后用Lambda来实现。在java8中已经内置了很多函数式接口,下面举例常用的Consumer、Supplier、Function和Predicate四大核心接口。
一、Consumer接口
在java8源码中,Consumer的接口如下。
/*@FunctionalInterface注解表示一个接口类为函数式接口*/
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
}
从接口中可以看出,支持泛型,Lambda表达式左边有一个参数,无返回值。例如我们用该接口实现:一个人消费的金额。在accept的实现方法中输入金额数,方法体执行打印。
public static void test1() {
Consumer<Float> consumer =
(x) -> {System.out.println("He consumes " + x + "¥");};
consumer.accept((float) 50.5);
}
运行,输出
He consumes 50.5¥
二、Supplier接口
java8中源码如下
@FunctionalInterface
public interface Supplier<T> {
T get();
}
该接口实现输入空,返回一个值。例如我们要Lambda实现返回一个字符串的长度。
public static void test2(){
Supplier<Integer> supplier =
() -> {
String s = "hello world";
Integer n = s.length();
return n;
};
Integer n = supplier.get();
System.out.println("n 的值为:" + n);
}
运行,输出
n 的值为:11
三、Function接口
java8中源码如下
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
输入一个T类型的值,返回一个R类型的值。例如我们实现:输入一个List<Integer>
类型的值,返回该list中最大的整数值。
public static void test3(){
Function<List<Integer>, Integer> function =
(x) -> {
int n = x.size();
Integer value = x.get(n-1);
return value;
};
List<Integer> list = Arrays.asList(1, 2, 3);
Integer lastValue = function.apply(list);
System.out.println("The lastValue is " + lastValue);
}
运行,输出:
The lastValue is 3
四、Predicate接口
java8中源码如下:
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
该接口实现,输入一个T类型的值,然后返回一个boolean类型。
例如,输入一个字符串,判断该字符串的长度是否大于10。
public static void test4(){
Predicate<String> predicate =
(x) -> {
int n = x.length();
if (n > 10) {
System.out.println("n 大于 10");
return true;
}else {
System.out.println("n 小于 10");
return false;
}
};
predicate.test("Hello world!");
}
运行,输出:
n 大于 10