如何在Java流中使用if语句来避免重复的流过程

问题描述 投票:0回答:1

这是我在 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 上运行该程序。

java lambda functional-programming stream
1个回答
3
投票

您可以在

filter()
步骤中使用包含三元表达式的单个流,该步骤选择要使用的与
pos
的比较:

average = inputs.stream()
                .mapToInt(s -> Integer.valueOf(s))
                .filter(pos -> "n".equals(answer) ? pos < 0 : pos > 0)
                .average()
                .getAsDouble();
© www.soinside.com 2019 - 2024. All rights reserved.