我目前正在学习流,并且正在使用 .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);
}
鸿蒙传说
TA贡献1865条经验 获得超7个赞
您可以orElse用来检索double由OptionalDouble.
这样做您还可以在Optional为空时决定默认值(在本例中我使用了0.0):
System.out.println("" + grades.stream()
.mapToInt(Integer::intValue)
.average()
.orElse(0.0)
);
添加回答
举报
0/150
提交
取消