猿问

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]


萧十郎
浏览 176回答 2
2回答

冉冉说

average()返回一个OptionalDouble对象,而不是一个double.如果您要对结果执行单个操作,例如打印它,则可以使用ifPresent(DoubleConsumer):grades.stream()&nbsp; &nbsp; &nbsp; &nbsp; .mapToInt(Integer::intValue)&nbsp; &nbsp; &nbsp; &nbsp; .average()&nbsp; &nbsp; &nbsp; &nbsp; .ifPresent(System.out::println);除此以外,OptionalDouble optionalAverage = grades.stream()&nbsp; &nbsp; &nbsp; &nbsp; .mapToInt(Integer::intValue)&nbsp; &nbsp; &nbsp; &nbsp; .average();if (optionalAverage.isPresent()) {&nbsp; &nbsp; double average = optionalAverage.getAsDouble();&nbsp; &nbsp; System.out.println(average);}

鸿蒙传说

您可以orElse用来检索double由OptionalDouble.这样做您还可以在Optional为空时决定默认值(在本例中我使用了0.0):System.out.println("" + grades.stream()&nbsp; &nbsp; &nbsp; &nbsp; .mapToInt(Integer::intValue)&nbsp; &nbsp; &nbsp; &nbsp; .average()&nbsp; &nbsp; &nbsp; &nbsp; .orElse(0.0));
随时随地看视频慕课网APP

相关分类

Java
我要回答