0 java lambda functional-programming java-stream
这是我在 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();
}
Run Code Online (Sandbox Code Playgroud)
我尝试过forEach,但我不明白如何使用它。我提供给流的集合是一个ArrayList.
我使用的是 Java 11。
filter()您可以在选择要使用的比较的步骤中使用包含三元表达式的单个流pos:
average = inputs.stream()
.mapToInt(s -> Integer.valueOf(s))
.filter(pos -> "n".equals(answer) ? pos < 0 : pos > 0)
.average()
.getAsDouble();
Run Code Online (Sandbox Code Playgroud)