关于java:Java-8函数式接口之Consumer用法

5次阅读

共计 989 个字符,预计需要花费 3 分钟才能阅读完成。

Consumer<T> 是 Java 8 中的一个预约义函数式接口,用于示意承受一个输出参数 T 并执行某些操作但没有返回值的操作。

Consumer<T> 接口中定义了一个形象办法 void accept(T t),该办法承受一个参数 t,示意要执行的操作。你能够应用 accept() 办法来定义具体的操作逻辑。


以下是应用 Consumer<T> 接口的示例代码:

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class ConsumerExample {public static void main(String[] args) {
        // 定义一个字符串列表
        List<String> fruits = Arrays.asList("Apple", "Orange", "Banana", "Mango");

        // 应用 Consumer 接口实现遍历输入每个水果的操作
        Consumer<String> printFruit = fruit -> System.out.println(fruit);
        fruits.forEach(printFruit);
        
        // 可简化为以下模式
        fruits.forEach(System.out::println);
    }
}

打印后果:

Apple
Orange
Banana
Mango

在下面的示例中,咱们首先创立了一个字符串列表 fruits,而后创立了一个 Consumer<String> 对象 printFruit,通过 lambda 表达式实现了 accept() 办法的具体操作,即打印每个水果的名称。

应用 forEach() 办法联合 Consumer 接口,能够简洁地遍历列表并执行指定的操作。

下边是 forEach() 办法的源码:

    default void forEach(Consumer<? super T> action) {Objects.requireNonNull(action);
        for (T t : this) {action.accept(t);
        }
    }

forEach 办法的实现中,首先查看传入的 action 是否为 null,如果为 null,则会抛出 NullPointerException。而后,它应用加强的 for 循环遍历 this(即以后 Iterable 对象),对每个元素执行 action.accept(t),其中 t 是以后元素。

正文完
 0