我不确定在创建数组后会做什么。
我知道数组A
的大小为5,并用1、0、3、5、3的5个值填充。
其余的我一无所知。
int[] A = new int[5];
A[0] = 1;
A[1] = 0;
A[2] = 3;
A[3] = 5;
A[4] = 3;
double y = Arrays.stream(A).filter(x -> (x != 0)).reduce(1, (x, y) -> x*y);
答案 0 :(得分:1)
double y = Arrays.stream(A).filter(x -> (x != 0)).reduce(1, (x, y) -> x*y)
让我们将上面的代码分成几部分,并理解它们各自的作用。
Arrays.Stream(A) -返回以指定数组为源的顺序Stream(此处为A)。
.filter(x->(x!= 0))-这将返回与条件匹配的对象流,在这里意味着除0以外的所有数字。
.reduce(1,(x,y)-> x * y)-产生一个单一的结果值。这里的第一个参数1是初始值,也是结果值的返回类型,而第二个参数是要执行的操作,这里是所有值的乘积。
因此,将返回1 * 3 * 5 * 3 = 45并将其存储在Y变量中。
答案 1 :(得分:1)
您的代码有错误。变量y
使用了2次。
注意:流与循环有很大的不同-实际上,这是循环的另一种方法。这里以术语循环为例。
非常简单的话:
filter()
有一个条件,如果条件为假,则该特定执行被破坏。像continue
那样循环。
reduce()
操作允许您通过对序列中的元素重复应用合并操作,从而从元素序列中生成一个单一结果。在这种情况下-乘法。
在stream()
中,每个中间操作都是延迟执行的,排序一次将数组中的一个元素提供给filter()
和reduce()
。
基线:它只是将数组的所有非零元素相乘并将其存储到变量中。
此处有更多关于流的信息:https://docs.oracle.com/javase/8/docs/api/?java/util/stream/Stream.html