📅  最后修改于: 2023-12-03 15:31:35.516000             🧑  作者: Mango
函数接口是Java8中非常重要的一个特性。函数接口的目的是为了简化函数式编程的过程,同时也方便了程序员,使他们在Java中实现函数式编程。
函数接口是Java8中的一个新特性,它是一个只有一个抽象方法的接口。换句话说,该接口现在充当了一个函数的角色,所以我们称之为函数接口。函数接口可以被lambda表达式实现。
Java 8的函数接口可以分为4类:
Consumer接口接受一个泛型参数,代表待处理输入的类型。这个接口只有一个抽象方法accept(T t)。该接口表示执行某些操作的对象。常见的例子是forEach()。
interface Consumer<T> {
void accept(T t);
}
示例代码:
List<String> names = Arrays.asList("Tom", "Jerry", "Alice", "Bob", "Carol");
names.forEach(name -> System.out.println("Hello, " + name));
将输出:
Hello, Tom
Hello, Jerry
Hello, Alice
Hello, Bob
Hello, Carol
Supplier接口不接受任何输入,返回泛型参数T的输出。这个接口只有一个抽象方法get()。该接口表示一个提供者。
interface Supplier<T> {
T get();
}
示例代码:
Supplier<Double> randomDouble = () -> Math.random();
for (int i = 0; i < 5; i++) {
System.out.println(randomDouble.get());
}
将输出:
0.2596781423265592
0.6835004810947327
0.8061854454943824
0.04226245775931482
0.2881517346446851
Function接口有一个泛型参数T,表示输入类型;一个泛型参数R,表示输出类型。该接口表示一个从T类型到R类型的函数。这个接口只有一个抽象方法R apply(T t)。
interface Function<T, R> {
R apply(T t);
}
示例代码:
Function<String, Integer> stringToInt = (s -> Integer.valueOf(s));
System.out.println(stringToInt.apply("123"));
将输出:
123
Predicate接口有一个泛型类型T,代表被传递的参数类型。该接口表示一个布尔类型函数,它接受一个参数并返回一个布尔值。该接口只有一个抽象方法boolean test(T t)。
interface Predicate<T> {
boolean test(T t);
}
示例代码:
Predicate<Integer> isEven = (n -> n % 2 == 0);
System.out.println(isEven.test(2));
将输出:
true
java.util.stream包是Java 8中实现函数式编程的一个很强大的工具。以下是使用java.util.stream包来编写的一个函数式编程实例。
示例代码:
List<String> names = Arrays.asList("Tom", "Jerry", "Alice", "Bob", "Carol");
List<String> filteredNames = names.stream().filter(name -> name.length() <= 4).collect(Collectors.toList());
filteredNames.forEach(name -> System.out.println(name));
将输出:
Tom
Bob