【问题标题】:How to sort and get highest value from Java Object/ArrayList [duplicate]如何从Java Object / ArrayList中排序并获得最高值[重复]
【发布时间】:2014-07-24 10:45:57
【问题描述】:

我有一个包含学生对象(姓名、数学标记、物理标记)的 ArrayList。如何对 ArrayList 进行排序并使用第一个最高数字/秒进行编辑,然后是第二高然后是第三,依此类推。例如我有下面的对象值:

ArrayList<> allStudents = new ArrayList();
allStudents.add(new Student("A", 80, 94) );
allStudents.add(new Student("B", 98, 91) );
allStudents.add(new Student("F", 70, 84) );
allStudents.add(new Student("C", 98, 92) );
allStudents.add(new Student("H", 99, 93) );

我将寻找数字最高的学生,我得到了 H。我将对象编辑为:“H”、97、90 并将其保存回该 ArraList。我再次寻找第二高,但在这里我有学生“B”和“C”,我可以看到他们在数学中相同的数字,但在物理 C 中的数字最高,所以我将编辑“C”、96、90 并将其保存回ArrayList 等等。这里哪个学生已经编辑过,我不会获取它们进行编辑和保存等等。如果有人请帮助我!提前致谢

【问题讨论】:

  • 它按下面的代码排序,现在请您详细介绍一下上面写的下一部分吗?那是;哪个将被编辑,我在搜索时不会得到那个,因为由于某种原因我将不得不一次又一次地搜索整个 ArrayList
  • 如果你请看这里并建议我stackoverflow.com/questions/24028238/…

标签: java object arraylist


【解决方案1】:

为您的学生对象实现一个 Comparable 接口,并指定您希望它如何比较。

这是一个很好的例子: http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

【讨论】:

    【解决方案2】:

    您需要创建一个 Comparator,它可以是匿名的,也可以是一个类,并在您的 Student 中为您的标记执行 get 方法,以便您可以在比较器中使用它来比较标记以进行排序

    示例:

    ArrayList<Student> allStudents = new ArrayList();
            allStudents.add(new Student("A", 80, 94));
            allStudents.add(new Student("B", 98, 91));
            allStudents.add(new Student("F", 70, 84));
            allStudents.add(new Student("C", 98, 92));
            allStudents.add(new Student("H", 99, 93));
    
            Collections.sort(allStudents, new Comparator<Student>() {
    
                public int compare(Student s, Student s2) {
                    return s.getMark() - s2.getMark();
                }
            });
    

    【讨论】:

    • 您需要添加辅助比较:int compare = s.getMathMark() - s2.getMathMark(); return compare != 0 ? compare : s.getPhysicsMark() - s2.getPhysicsMark();
    • 酷!它适用于第一个代码块!非常感谢大家:)
    • 您也可以只使用Collections.max() 而不是Collections.sort()
    • 它排序了,现在如果你能详细介绍一下上面写的下一部分吗?那是;哪个将被编辑,我在搜索时不会得到那个,因为由于某种原因我将不得不一次又一次地搜索整个 ArrayList
    • 如果你请看这里并建议我stackoverflow.com/questions/24028238/…
    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多