函数式接口
# 什么是函数式接口?
- 单一抽象方法:函数式接口包含一个抽象方法;
- @FunctionalInterface:标识一个接口为函数式接口;
- 可使用Lambda表达式创建函数式接口的实例,实现接口的抽象方法;
- 函数式接口可以包含default方法和static方法,默认方法提供了一种为接口添加新方法而不破坏现有实现的机制;
- 通用函数接口:Java标准库中有一些通用的函数式接口,如
Function
、Consumer
、Supplier
、Predicate
等;
# Function
用于将一个值转换为另一个值;
定义了一个接受一个参数并返回结果的函数;
@FunctionalInterface public interface Function<T, R> { R apply(T t); }
1
2
3
4T表示输入参数类型,R表示返回结果类型;
案例:将字符串转换为大写;
public class FunctionTest {
public static void main(String[] args) {
Function<String,String> uppercaseFunction = str->str.toUpperCase();
String res = uppercaseFunction.apply("rui");
System.out.println(res);
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# Consumer
接受一个参数,没有返回值;
@FunctionalInterface public interface Consumer<T> { void accept(T arg0); }
1
2
3
4
案例:打印名字;
public class ConsumerTest {
public static void main(String[] args) {
List<String> list = Arrays.asList("rui", "kk");
Consumer<String> printName = name-> System.out.println(name);
list.forEach(printName);
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# Supplier
不接受参数,对外提供返回值;
@FunctionalInterface public interface Supplier<T> { T get(); }
1
2
3
4
案例:提供一个随机数;
public class SupplierTest {
public static void main(String[] args) {
Supplier<Integer> randomNumSupplier = ()->new Random().nextInt();
int randomNum = randomNumSupplier.get();
System.out.println(randomNum);
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7