Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这段代码在做什么?I';我是新来的,仍然对Java感到困惑_Java - Fatal编程技术网

这段代码在做什么?I';我是新来的,仍然对Java感到困惑

这段代码在做什么?I';我是新来的,仍然对Java感到困惑,java,Java,我不确定阵列制作完成后会发生什么 我知道数组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); 让我们把上面的代码分成

我不确定阵列制作完成后会发生什么

我知道数组
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);
让我们把上面的代码分成几部分,并了解它们各自在做什么

-返回一个序列流,其中指定的数组作为其源,此处为a

.filter(x->(x!=0))-这将返回符合条件的对象流,这里表示除0之外的所有数字

.reduce(1,(x,y)->x*y)生成一个结果值。这里,第一个参数1是初始值,也是结果值的返回类型,第二个参数是要执行的操作,这里是所有值的乘法


因此,1*3*5*3=45将返回并存储在Y变量中。

您的代码有一个错误。变量
y
使用了2次

注意:流与循环非常不同-事实上,这是循环的另一种方法。这里使用循环这个术语作为示例

简单地说:

filter()
有一个条件,如果该条件为false,则该特定执行被中断。有点像循环中的
continue

reduce()
操作允许您通过对序列中的元素重复应用组合操作,从元素序列生成单个结果。在这种情况下,是乘法

stream()
中,每个中间操作都是延迟执行的,每次从数组中提供一个元素到
filter()
reduce()

基线:它只是将数组的所有非零元素相乘,并将其存储到一个变量中


更多关于流的信息:

如果首先过滤掉
0的任何值,然后将所有值相乘。因此,最终您将获得
double y=45
,最好从阅读所使用的每个函数(
stream
filter
reduce
)的文档开始,并从中获取它。您也可以单独运行
过滤器
减少
,以便了解每个函数的作用,或者直接内联转储每个函数的结果。
double y = Arrays.stream(A).filter(x -> (x != 0)).reduce(1, (x, y) -> x*y)