打印IntStream平均值的结果

Mic*_*rty 5 java optional java-8 java-stream

我目前正在学习流,并使用.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());

}
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出

 OptionalDouble[88.0]
Run Code Online (Sandbox Code Playgroud)

And*_*lko 4

average()返回一个OptionalDouble对象,而不是double.

\n\n

如果您要对结果执行单个操作(例如打印它),您可以使用ifPresent\xe2\x80\x8b(DoubleConsumer)

\n\n
grades.stream()\n        .mapToInt(Integer::intValue)\n        .average()\n        .ifPresent(System.out::println);\n
Run Code Online (Sandbox Code Playgroud)\n\n

否则,

\n\n
OptionalDouble optionalAverage = grades.stream()\n        .mapToInt(Integer::intValue)\n        .average();\n\nif (optionalAverage.isPresent()) {\n    double average = optionalAverage.getAsDouble();\n    System.out.println(average);\n}\n
Run Code Online (Sandbox Code Playgroud)\n