如何利用java流和lambda函数生成if~elseif语句?

kgsdhlau  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(290)

我想做如下的成绩计划。
但我不能使用if~else语句。
必须使用java流和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");
        }
}
camsedfj

camsedfj1#

流更像是一个循环构造而不是一个条件构造。由于一个阶段的结果可以链接到另一个阶段,因此它们需要保持对象结构的一致性,以便从一个阶段传递到另一个阶段。所以,我不认为有一种方法可以将if-else语句作为单独的阶段来编写。但是,您可以将它们 Package 在一个Map中并执行条件工作。

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");
        }
   })
}
wmvff8tz

wmvff8tz2#

您可以使用此解决方案:

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());
    }
}

相关问题