Consumer是一个函数式接口,表示接受一个参数,然后执行,没有返回结果。
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
下面就是accept方法的使用,理解为这就是一个函数, 函数的入参必须要有一个,返回为void就行,最后那种写法就是因为println的入参只有一个String类型的所以才满足。
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
consumer.accept("hello");
consumer = x ->{
System.out.println(x);
};
consumer.accept("hello");
consumer = System.out::println;
consumer.accept("hello");
还一个andThen方法,就是consumer1调用andThen方法,参数是consumer2,返回是一个consumer。然后这个consumer再执行accept()就相当于先执行consumer1中的accept()再执行consumer2中的accept()。感觉用到的机会很少,我直接一个consumer能搞定的事为什么要用俩。
Consumer<String> consumer1 = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println("consumer1" + s );
}
};
Consumer<String> consumer2 = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println("consumer2" + s);
}
};
consumer1.andThen(consumer2).accept("hello");