【问题标题】:How to find the sumOfelements in array of datatype如何找到数据类型数组中元素的总和
【发布时间】:2019-01-17 04:44:42
【问题描述】:

我有一个自定义类

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 我怀疑在 OP 的情况下这不是迭代方法所做的,而是利用对象内部的属性。
  • @nullpointer ooo 我明白了

标签: java arrays java-8 java-stream


【解决方案1】:

您似乎正在寻找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
}

【讨论】:

    【解决方案2】:

    你可以使用reduce操作:

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

    或者@nullpointer 显示的sum

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

    【讨论】:

      猜你喜欢
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 2016-07-07
      相关资源
      最近更新 更多