这段代码在做什么?我是新手,但仍然对Java感到困惑

时间:2019-10-19 21:18:52

标签: 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);

2 个答案:

答案 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