【问题标题】:How to make if~elseif statement using by Java stream and lambda function?如何使用 Java 流和 lambda 函数制作 if~elseif 语句?
【发布时间】:2020-09-03 19:30:47
【问题描述】:

我想制作如下的评分程序。

但我不能使用 if~else 语句。

必须使用 Java Stream 和 lambda 函数。

public static void main(String[] args) {
   Scanner sc = new Scanner(System.in);
   System.out.println("score : ");
   int score = sc.nextInt();

   switch(score/10) {
        case 10:
        case 9:
            System.out.println("A");
            break;
        case 8:
            System.out.println("B");
            break;
        case 7:
            System.out.println("C");
            break;
        case 6:
            System.out.println("D");
            break;
        default :
            System.out.println("F");
        }
}

【问题讨论】:

  • 我真的不知道你会如何在这里使用流。
  • 您当前的解决方案不使用if-else
  • Java 流和 lambda 函数如何使用 if~elseif 语句? - if-else 和流/lambda 没有共同点。如果您正在解决一些要求您使用流的任务/家庭作业,也许您可​​以提供他们确切要求的上下文?

标签: java lambda java-8 java-stream


【解决方案1】:

Stream 更像是一个循环结构,而不是一个条件结构。并且由于一个阶段的结果可以链接到另一个阶段,因此它们需要保持对象结构的一致性,以便从一个阶段传递到另一个阶段。 所以,我认为没有办法将 if-else 语句编写为单独的阶段。 但是,您可以将它们包装在地图中并执行条件操作。

public static void main(String[] args) {
   Arrays.stream(args)
   .map(Integer::parseInt)
   .forEach(score => {
      switch(score/10) {
        case 10:
        case 9:
            System.out.println("A");
            break;
        case 8:
            System.out.println("B");
            break;
        case 7:
            System.out.println("C");
            break;
        case 6:
            System.out.println("D");
            break;
        default :
            System.out.println("F");
        }
   })
}

【讨论】:

  • => 应该是->。您也可以使用mapToInt 以获得更好的性能。也许添加一些 cmets 也会很好,尤其是在 map 调用中,因为 OP 可能不知道方法引用。
  • 将 OP 的程序从读取 System.in 更改为通过 args 参数进行流式传输甚至无法远程解决任务。
  • 数组可以来自任何地方。问题是关于溪流的条件。我想我在这方面做得还不错。不过,我明白你的意思。请随时编辑帖子。
【解决方案2】:

你可以使用这个解决方案:

public class App {

    static class Grade {
        private final String grade;
        private final Integer score;

        public Grade(String grade, Integer score) {
            this.grade = grade;
            this.score = score;
        }

        public String getGrade() {
            return grade;
        }

        public Integer getScore() {
            return score;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("score : ");
        int score = sc.nextInt();
        List<Grade> gradeList = new ArrayList<>();
        gradeList.add(new Grade("A", 9));
        gradeList.add(new Grade("B", 8));
        gradeList.add(new Grade("C", 7));
        gradeList.add(new Grade("D", 6));

        Grade s = gradeList.stream()
                .filter(el -> ( score / 10 ) >= el.getScore())
                .findFirst().orElse(new Grade("F", 5));
        System.out.println(s.getGrade());
    }
}

【讨论】:

  • 如果复杂也是一种选择,为什么容易?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
相关资源
最近更新 更多