📜  Java8 函数接口(1)

📅  最后修改于: 2023-12-03 15:31:35.516000             🧑  作者: Mango

Java 8函数接口

函数接口是Java8中非常重要的一个特性。函数接口的目的是为了简化函数式编程的过程,同时也方便了程序员,使他们在Java中实现函数式编程。

什么是函数接口

函数接口是Java8中的一个新特性,它是一个只有一个抽象方法的接口。换句话说,该接口现在充当了一个函数的角色,所以我们称之为函数接口。函数接口可以被lambda表达式实现。

Java 8的函数接口分类

Java 8的函数接口可以分为4类:

  1. Consumer接口
  2. Supplier接口
  3. Function接口
  4. Predicate接口
Consumer接口

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接口

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接口

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接口

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 8的函数式编程实例

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