如何在数据类型数组中找到sumOfelements

时间:2019-01-17 04:44:43

标签: java arrays java-8 java-stream

我有一个自定义课程

class StackInfo {
    int start, size, capacity;
}

并验证我拥有的此类信息数组中存在的元素总数

private int numberOfElements(StackInfo[] info) {
    int size = 0;
    for (StackInfo si : info) {
        size += si.size;
    }
    return size;
}

我尝试使用流将其转换为以下内容:

private int numberOfElements(StackInfo[] info) {
    return (int) Arrays.stream(info).map(s -> s.size).count();
    //       ^^ 
    //     to convert long
}

但是上面的代码的输出在铸造后也是不正确的。

2 个答案:

答案 0 :(得分:8)

您似乎在寻找sum操作,而不是count,这将需要您将Stream大部分转换为IntStream。您可以将代码更新为:

private int numberOfElementsStream(StackInfo[] info) {
    return Arrays.stream(info)    // Stream<StackInfo>
            .mapToInt(sd -> sd.size)   //IntStream of their size
            .sum();   // sum of all
}

答案 1 :(得分:2)

您可以使用reduce操作:

Arrays.stream(info).reduce((s1, s2) -> s1.size + s2.size);

或者如{nullpointer所示的sum

Arrays.stream(info).mapToInt(StackInfo::getSize).sum();