44

如果我有:ArrayList<Double> m = new ArrayList<Double>(); 里面有double值,我应该怎么做才能把所有的ArrayList元素加起来呢?

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

作为?

4

8 回答 8

62

两种方式:

使用索引:

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;
于 2013-04-26T18:20:34.740 回答
25

使用 Java 8

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

System.out.println(sum); 
于 2018-04-19T09:29:21.683 回答
10

Integer适用于、LongDouble的Java 8+ 版本Float

    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

于 2019-05-28T23:31:24.093 回答
9

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

public double incassoMargherita()
{
    double sum = 0;
    for(int i = 0; i < m.size(); i++)
    {
        sum = sum + m.get(i);
    }
    return sum;
}
于 2013-04-26T18:16:33.890 回答
5

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

public double incassoMargherita()
{
    double sum = 0;
    for(int i = 0; i < m.size(); i++)
    {
        sum += m.get(i);
    }
    return sum;
}
于 2013-04-26T18:16:26.053 回答
1

您甚至可以利用 of 的reduce力量stream。在 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);
}
于 2021-06-30T08:08:58.643 回答
0

尝试这个

----
public double incassoMargherita()
{
    double sum = 0;
    for(int i = 0; i < m.size(); i++)
    {
     sum = sum +(double) m.get(i);
    }
    return sum;
}
于 2021-04-28T13:14:24.603 回答
0

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

sum = m.sum()
于 2021-10-27T18:55:29.690 回答