先了解下这个单词的意思:Consumer [kənˈsjuːmə(r)] :消费者
既然是消费者,那么它消费的是什么呢?先说结论:消费的是函数(或是代码段),封装的是逻辑代码。
先看看,如果我们要遍历一个List集合,一般我们会这么写:
List<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
for (String s : list) {
System.out.println(s);
}
那如果我要遍历list,但是我又不想写增强for遍历list呢?那我们可以把增强for提前写好,并封装到一个处理步骤中,如下:
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
这个是jdk源码中的List的forEach方法,可以看到forEach方法把增强for的逻辑封装到方法体了(封装的是逻辑代码)。在这段逻辑代码中,action.accept(t);代表的是消费的函数体本身或者是我们写的任意代码(消费的是函数<