【问题标题】:Sum all the elements java arraylist对所有元素求和 java arraylist
【发布时间】:2013-04-20 23:59:06
【问题描述】:

如果我有:ArrayList<Double> m = new ArrayList<Double>(); 里面有double值,怎么把ArrayList元素全部加起来呢?

public double incassoMargherita()
{
 double sum = 0;
 for(int i = 0; i < m.size(); i++)
 {          
 }
 return sum;
}

作为?

【问题讨论】:

  • sum += m.get(i) 怎么样?
  • 提示:要从指定位置的列表中获取值,您可以使用m.get(indexOfPosition)
  • 或者,创建一个 foreach 循环并将 sum 添加到 foreach 中的每个元素。
  • 或使用:用于 int 版本的 JAVA 8,int sum = list.stream().mapToInt(Integer::intValue).sum();
  • 这个问题应该重新打开。它是有效的、具体的和有用的。查看问题和答案的赞成票。查看正在添加的关于将 Java Streams 用于功能性解决方案的更新信息。

标签: java arraylist sum


【解决方案1】:

我知道这是一个非常古老的问题,但为什么没有人提供没有循环的最简单方法?

sum = m.sum()

【讨论】:

    【解决方案2】:

    您甚至可以利用reducestream 的强大功能。 在 Java 8 中,Stream.reduce() 组合流的元素并生成单个值。

    public double incassoMargherita()
    {
        // reduce takes 2 args => 
        // 1. initial value
        // 2. binary operator
        return m.stream().reduce(0, (a,b) -> a + b);
    }
    

    【讨论】:

      【解决方案3】:

      试试这个

      ----
      public double incassoMargherita()
      {
          double sum = 0;
          for(int i = 0; i < m.size(); i++)
          {
           sum = sum +(double) m.get(i);
          }
          return sum;
      }
      

      【讨论】:

        【解决方案4】:

        IntegerLongDoubleFloat 的 Java 8+ 版本

            List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5);
            List<Long> longs = Arrays.asList(1L, 2L, 3L, 4L, 5L);
            List<Double> doubles = Arrays.asList(1.2d, 2.3d, 3.0d, 4.0d, 5.0d);
            List<Float> floats = Arrays.asList(1.3f, 2.2f, 3.0f, 4.0f, 5.0f);
        
            long intSum = ints.stream()
                    .mapToLong(Integer::longValue)
                    .sum();
        
            long longSum = longs.stream()
                    .mapToLong(Long::longValue)
                    .sum();
        
            double doublesSum = doubles.stream()
                    .mapToDouble(Double::doubleValue)
                    .sum();
        
            double floatsSum = floats.stream()
                    .mapToDouble(Float::doubleValue)
                    .sum();
        
            System.out.println(String.format(
                    "Integers: %s, Longs: %s, Doubles: %s, Floats: %s",
                    intSum, longSum, doublesSum, floatsSum));
        

        15、15、15.5、15.5

        【讨论】:

          【解决方案5】:

          两种方式:

          使用索引:

          double sum = 0;
          for(int i = 0; i < m.size(); i++)
              sum += m.get(i);
          return sum;
          

          使用“for each”样式:

          double sum = 0;
          for(Double d : m)
              sum += d;
          return sum;
          

          【讨论】:

          • 或使用:JAVA 8 int sum = list.stream().mapToInt(Integer::intValue).sum();
          • @AnandVarkeyPhilips 这就像用核武器杀死苍蝇:P
          • 你认为是为什么?会不会导致性能下降??少而干净的代码,我所希望的!
          • @AnandVarkeyPhilips Barranka 评论末尾的:P 表示她/他在开玩笑,或半开玩笑。见Emoticons list伸出舌头,厚脸皮/顽皮,吹树莓
          • @AnandVarkeyPhilips 我无意以任何方式冒犯您,我也不认为您的解决方案不正确。您的回答正确的,我只是在开玩笑(感谢 BasilBourque 指出)
          【解决方案6】:

          使用 Java 8 streams

          double sum = m.stream()
              .mapToDouble(a -> a)
              .sum();
          
          System.out.println(sum); 
          

          【讨论】:

          • 那是什么?
          • a -&gt; a 是一个 lambda 函数。箭头之前是参数列表 (a),箭头之后是函数体 (a)。大致相当于double identity(double a) { return a }
          【解决方案7】:

          我还没有测试它,但它应该可以工作。

          public double incassoMargherita()
          {
              double sum = 0;
              for(int i = 0; i < m.size(); i++)
              {
                  sum = sum + m.get(i);
              }
              return sum;
          }
          

          【讨论】:

          • 我总是对我的项目负责人这么说。 :)
          【解决方案8】:

          不是很难,只需使用m.get(i) 从列表中获取值。

          public double incassoMargherita()
          {
              double sum = 0;
              for(int i = 0; i < m.size(); i++)
              {
                  sum += m.get(i);
              }
              return sum;
          }
          

          【讨论】:

            猜你喜欢
            • 2014-01-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-11
            • 2019-05-14
            相关资源
            最近更新 更多