为了账号安全,请及时绑定邮箱和手机立即绑定

IntStream 平均值的打印结果

IntStream 平均值的打印结果

萧十郎 2021-10-20 14:52:36
我目前正在学习流,并且正在使用 .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]
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

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);

}


查看完整回答
反对 回复 2021-10-20
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您可以orElse用来检索double由OptionalDouble.


这样做您还可以在Optional为空时决定默认值(在本例中我使用了0.0):


System.out.println("" + grades.stream()

        .mapToInt(Integer::intValue)

        .average()

        .orElse(0.0)

);


查看完整回答
反对 回复 2021-10-20
  • 2 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信