我想使用Streams和Lambdas。 但是如何用它重写我当前的方法呢?
public double calculate() {
double result = 0.0;
if (!mediumList.isEmpty()) {
Iterator<Medium> it = mediumList.iterator();
while (it.hasNext()) {
result= result+ it.next().getAge();
}
result = result / mediumList.size();
}
return result;
}
答案 0 :(得分:6)
您可以使用IntStream.average()
return mediumList.stream()
.mapToInt(Medium::getAge) // mapToInt makes it an IntStream of the ages
.average() // get the average of the ages.
.orElse(Double.NaN); // otherwise use Double.NaN if the list is empty.
您需要使用mapToInt
使其成为IntSTream,以便对其进行平均或求和。如果您只使用map
,则可以获得Stream<Integer>
,但这不具备sum
或average
个功能。
答案 1 :(得分:2)
假设Medium
age
是int
,您可以通过调用map
然后{{1}来medium
在流中getAge
sum
它。像,
public double calculate() {
return mediumList.stream().mapToInt(Medium::getAge).sum() /
(double) mediumList.size();
}
答案 2 :(得分:2)
仅供参考,如果mediumList为空,则返回0.0
:
return mediumList.stream()
.collect(Collectors.averagingDouble(Medium::getAge));