如何使用streams / lambdas重构此方法?

时间:2016-12-17 18:52:34

标签: java lambda java-8 java-stream

我想使用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;
}

3 个答案:

答案 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>,但这不具备sumaverage个功能。

答案 1 :(得分:2)

假设Medium ageint,您可以通过调用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));