Java 8 中的 消费者接口Consumer 是一个函数接口,它可以接受一个泛型 类型参数,它属于java.util.function包。
accept(T) 方法:是 Consumer 函数式接口的方法,传入单个输入参数,无返回值,可以用于 Lambda 表达式和方法引用。
andThen(Consumer) 方法:可以传入一个 Consumer ,返回组合了两个 Consumer 后的 Consumer ,传入的 Consumer 不能为 null,否则会得到 NullPointerException 。
你可以使用 Consumer 来执行某个动作,比如打印操作,该动作接受一个参数并且不返回任何值。
我们先来看两个例程:
import java.util.function.Consumer;
public class ConsumerTest {
public static void main(String[] args) {
Consumer<String> first = x -> System.out.println("1."+x.toLowerCase());
Consumer<String> second = y -> System.out.println("2." + y);
System.out.println("开始");
Consumer<String> result = first.andThen(second);
//调用了accept 时,会先执行 first 的代码,再执行 second 的代码
result.accept("World");
}
}
调用accept 方法时,会先执行 first 里的代码,再执行 second 里的代码
测试结果:
第二个例程:
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Stream;
public class ConsumerTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Consumer <String> consumer = x -> {
if (x.startsWith("a")){
list.add(x);
}
};
Stream.of( "aa","bb","cac","abd","ee" ).forEach(consumer);
list.forEach(System.out::println);
}
}
测试结果:
未完待续