前言
本文章帮助大家对Consumer
接口的理解。
一、概述
Consumer
意为消费者。顾名思义,它对传入参数进行处理(“消费”),一般为带副作用的处理。
它是一个函数式接口,它可作为一个单个参数的无结果lambda
表达式的接口类型。
二、源码理解
包
package java.util.function;
import java.util.function.Consumer;
使用Consumer
接口时,需引入此包。
Consumer接口
public interface Consumer<T> { /*...*/ }
使用接口时传入泛型T
。T
为函数式的参数类型,表示要处理的参数的类型。
Consumer方法
accept
void accept(T t);
传入参数t
,进行处理,即提供函数逻辑。通常可以这样使用:
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
以下为精简写法:
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(System.out::println);
例子中程序最终打印“a”、“b”、“c”。参考Iterable
接口的default void forEach(Consumer<? super T> action)
方法。
andThen
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
组合此函数式和after
函数式的函数逻辑,即返回的函数式先执行此函数式处理逻辑,再执行after
函数式处理逻辑。若after
为空,则抛出NullPointerException
异常,参考Objects.requireNonNull
方法。default
关键字给出默认实现。
注意:若此函数式出现异常,则after
函数式不执行。若此方法过程中出现异常,那么这些异常会交给返回函数式的调用方处理。
总结
新人源码理解,望大家多多指点。