给出下面这段代码,我无法理解它是如何返回此输出的:
* 2 = 2
1 * 2 = 4
2 * 2 = 6
3
public static void generateMultiplicationTable(int number){
Stream<Integer> sin = Stream.of(1, 2, 3 );
Consumer<Integer> c1 = System.out::print;
Consumer<Integer> c2 = x->{ System.out.println(" * "+number+" = "+x*number); };
sin.forEach(c2.andThen(c1));}
我理解andThen是如何工作的,将第一个函数的输出应用于第二个函数作为输入,基于这种理解,它应该返回以下内容:
* 2 = 2
* 2 = 4
* 2 = 6
发布于 2020-12-06 03:52:24
andThen
的实现类似于下面的代码:
default Consumer<T> andThen(Consumer<? super T> after) {
return (T t) -> {
this.accept(t);
after.accept(t);
};
}
因此,forEach
调用可以重写为:
sin.forEach(number -> {
c2.accept(number);
c1.accept(number);
});
因此,对于流的第一个元素,c2
打印* 2 = 2
,新行c1
打印1
。第二个元素使c2
打印* 2 = 4
和一个新行,c1
打印2
,依此类推。
如果你真的想要一个乘法表,你应该先运行c1
,即c1.andThen(c2)
。
https://stackoverflow.com/questions/65164398
复制相似问题