如何找到数据类型为数组的元素之和

4
我有一个自定义类。
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
}

但是即使进行了类型转换,上述代码的输出结果仍然不正确。

为什么不直接使用 info.length 呢? - Kartik
2
@Kartik 我怀疑在 OP 的情况下,迭代方法并不是所做的事情,而是利用对象内部的属性。 - Naman
@nullpointer 噢,我明白了。 - Kartik
2个回答

8

您似乎正在寻找sum操作,而不是需要将流转换为IntStreamcount操作。您可以更新您的代码:

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

2
您可以使用reduce操作:
Arrays.stream(info).reduce((s1, s2) -> s1.size + s2.size);

或者像 @nullpointer 所示的那样,使用 sum

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接