[英]How to sum up all the elements with the same property in an ArrayList in Java?
[英]Sum all the elements java arraylist
如果我有: ArrayList<Double> m = new ArrayList<Double>();
里面有double值,怎么把所有的ArrayList元素加起来?
public double incassoMargherita()
{
double sum = 0;
for(int i = 0; i < m.size(); i++)
{
}
return sum;
}
作为?
两种方式:
使用索引:
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 流:
double sum = m.stream()
.mapToDouble(a -> a)
.sum();
System.out.println(sum);
我还没有测试过,但它应该可以工作。
public double incassoMargherita()
{
double sum = 0;
for(int i = 0; i < m.size(); i++)
{
sum = sum + m.get(i);
}
return sum;
}
Integer
、 Long
、 Double
和Float
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
不是很难,只需使用m.get(i)
从列表中获取值。
public double incassoMargherita()
{
double sum = 0;
for(int i = 0; i < m.size(); i++)
{
sum += m.get(i);
}
return sum;
}
您甚至可以利用reduce
of 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);
}
尝试这个
----
public double incassoMargherita()
{
double sum = 0;
for(int i = 0; i < m.size(); i++)
{
sum = sum +(double) m.get(i);
}
return sum;
}
我看到这是一个非常古老的问题,但为什么没有人提供没有循环的最简单方法?
sum = m.sum()
double sumTransaction = transactionList.stream().mapToDouble(a -> a.getApacAmount()).sum();
System.out.println(sumTransaction);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.