Consumer
如果需要访问类型T的对象,并对其执行某些操作,就可以使用这个Consumer
接口。
输出list的内容
public static void main(String[] args) {
List<String> list = Arrays.asList("1", "2", "3", "11", "22", "33");
Consumer<String> consumer = (String str) -> System.out.println(str);
Consumer<String> andThenConsumer = (String str) -> System.out.println("andThen:" + str);
Consumer<String> andThen2Consumer = (String str) -> System.out.println("andThen2:" + str);
forEach(list, consumer);
forEach(list, consumer, andThenConsumer);
forEach(list, consumer, andThenConsumer, andThen2Consumer);
}
public static <T> void forEach(List<T> list, Consumer<T> consumer) {
for (T t : list) {
consumer.accept(t);
}
}
运行结果如下:
accept方法负责对字符串的输出。
复合
andThen
除了对字符串的直接输出,还要在前面加个andThen
public static <T> void forEach(List<T> list, Consumer<T> consumer, Consumer<T> andThenConsumer) {
for (T t : list) {
consumer.andThen(andThenConsumer).accept(t);
}
}
运行结果如下:
源码如下:
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
所以先执行accept的方法,再执行andThen的方法。
多个andThen
除了对字符串的直接输出,还要在前面加个andThen以及andThen2
public static <T> void forEach(List<T> list, Consumer<T> consumer, Consumer<T> andThenConsumer, Consumer<T> andThen2Consumer) {
for (T t : list) {
consumer.andThen(andThenConsumer).andThen(andThen2Consumer).accept(t);
}
}
运行结果如下:
可以看出,accept方法先执行,然后在从左到右依次执行andThen
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。