首页 > 解决方案 > 你如何按等级对数组的值进行排序(例如 85-100 是 A 70-84 是 B 等)

问题描述

我正在开发一个将值存储在 ArrayList 中的程序,并且需要按 R、1、2、3 和 4 等相应等级对它们进行排序。如何获取数组中的值并以这种方式对它们进行排序?

我基本上什么都没试过,因为我很困惑。

public class MarksProgramUI extends javax.swing.JFrame {
    List<Integer> marksFinal = new ArrayList<>();
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          

    String marks = markInput.getText();
    int marksnum;
    marksnum = Integer.parseInt(marks);
    marksFinal.add(marksnum);
    Collections.sort(marksFinal);
    String output = " ";
    for ( int i=0;i<marksFinal.size();i++){
        output=output+marksFinal.get(i) + " ";
      }
    markOutput.setText(output + " " );
}                                     

private void analyseButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
resultOutput.setText("Class Average: " + calculateAverage(marksFinal) + "\n" + "Maximum Mark: " + calculateMaxValues(marksFinal) + "\n" + "Minimum Mark: " + calculateMinValues(marksFinal) + "\n");
}

标签: javaarrays

解决方案


通过“排序”,我假设您的意思是“分组依据”。您可以将标记分组为:-

List<Integer> marks = List.of(86, 74, 90, 40); //some dummy list of marks
Map<String, List<Integer>> map = marks.stream()
        .collect(Collectors.groupingBy(o -> {
            if (o < 50) return "F"; //assign grade 'F' to marks less than 50
            if (o < 65) return "1"; //assign grade '1' to marks from 50 to 64
            if (o < 75) return "2"; //65 to 74
            return "R"; //grade 'R' to 75 and above
        }));
System.out.println(map);

输出

{2=[74], R=[86, 90], F=[40]}

正如您在上面看到的,分数 86 和 90 被归为“R”级。

您可以更改上述if条件以满足您的需要。


推荐阅读