java – 打印IntStream平均值的结果

我目前正在学习流,并使用.average函数来计算使用扫描仪输入的某些整数的平均值.
我遇到的问题是如何格式化输出,以便它不会说可选的double.

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class ClassAverage {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    List<Integer> grades = new ArrayList<Integer>();

    while (scan.hasNextInt()) {
        grades.add(scan.nextInt());

        if (scan.equals("end")) {
            {
                break;
            }

        }
        grades.forEach(System.out::println);

    }

    System.out.println("" + grades.stream()
            .mapToInt(Integer::intValue)
            .average());

}
}

这是我得到的输出

 OptionalDouble[88.0]
最佳答案
average()返回OptionalDouble对象,而不是double.

如果你有一个动作来执行结果,比如打印它,你可以使用ifPresent​(DoubleConsumer)

grades.stream()
        .mapToInt(Integer::intValue)
        .average()
        .ifPresent(System.out::println);

除此以外,

OptionalDouble optionalAverage = grades.stream()
        .mapToInt(Integer::intValue)
        .average();

if (optionalAverage.isPresent()) {
    double average = optionalAverage.getAsDouble();
    System.out.println(average);
}

转载注明原文:java – 打印IntStream平均值的结果 - 代码日志