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)
average()返回一个OptionalDouble对象,而不是double.
如果您要对结果执行单个操作(例如打印它),您可以使用ifPresent\xe2\x80\x8b(DoubleConsumer):
grades.stream()\n .mapToInt(Integer::intValue)\n .average()\n .ifPresent(System.out::println);\nRun Code Online (Sandbox Code Playgroud)\n\n否则,
\n\nOptionalDouble optionalAverage = grades.stream()\n .mapToInt(Integer::intValue)\n .average();\n\nif (optionalAverage.isPresent()) {\n double average = optionalAverage.getAsDouble();\n System.out.println(average);\n}\nRun Code Online (Sandbox Code Playgroud)\n