这是我在 Java MOOC.fi 课程中学习流的代码。下面的代码可以工作,但我编写它的方式相当业余。我正在考虑以某种方式将流中的 if 语句与先前输入中给出的答案的条件集成,以通过更改一行(过滤器方法)来预测该过程。有什么想法吗?
System.out.println("Print the average of the negative numbers or the positive numbers? (n/p)");
String answer = scanner.nextLine();
double average;
if (answer.equals("n")) {
average = inputs.stream()
.mapToInt(s -> Integer.valueOf(s))
.filter(pos -> pos < 0)
.average()
.getAsDouble();
} else {
average = inputs.stream()
.mapToInt(s -> Integer.valueOf(s))
.filter(pos -> pos > 0)
.average()
.getAsDouble();
}
我尝试了 forEach 但我不明白如何使用它。我提供给流的集合是一个 ArrayList。
我使用 Java v11.0.18 并在 NetBeans v1.5.0 上运行该程序。
您可以在
filter()
步骤中使用包含三元表达式的单个流,该步骤选择要使用的与 pos
的比较:
average = inputs.stream()
.mapToInt(s -> Integer.valueOf(s))
.filter(pos -> "n".equals(answer) ? pos < 0 : pos > 0)
.average()
.getAsDouble();