如何针对其中的两个元素(两列)对类型为class的数组列表进行排序

时间:2019-12-15 14:12:41

标签: java sorting arraylist

我有一个'class'(Info)类型的arraylist(arrList)。'Info'类具有两个属性,分别是long的'case'和'step'。我需要通过比较Info类中的两个属性来对arraylist进行升序排序。

//scrambled list
arrList={[#case,#step],[2,1],[1,4],[2,2],[1,2],[1,3],[1,1],[2,3],[2,4],.....}

//Output I need
arrList={[#case,#step],[1,1],[1,2],[1,3],[1,4],[2,1],[2,2],[2,3],[2,4],...}

我会说得更清楚。例如,

案例1具有步骤1,2,3,4&案例2具有步骤1,2,3,4

所以,在这里,我需要像case和step这样的arraylist一起排序([[1,1],[1,2],[1,3] ...)

我尝试使用下面给出的代码。

        for (int i = 0; i < arrList.size(); i++) {
            for (int j = i+1; j < arrList.size(); j++) {
                long tmp1Case=arrList.get(i).getCase_ID();//case id value --i
                long tmp1Step=arrList.get(i).getStep_ID();//step id value --i

                long tmp2Case=arrList.get(j).getCase_ID();//case id value --j
                long tmp2Step=arrList.get(j).getStep_ID();//step id value --j

               if (tmp1Case>=tmp2Case && tmp1Step>tmp2Step ) {
                    Info tmp = new Info();
                    tmp = arrList.get(i);

                    arrList.get(i).setStep_ID(arrList.get(j).getStep_ID());
                    arrList.get(i).setCase_ID(arrList.get(j).getCase_ID_ID());

                    arrList.get(j).setStep_ID(tmp.getStep_ID());
                    arrList.get(j).setCase_ID(tmp.getCase_ID());
                }
            }

        }

//printing the arraylist ...

输出错误。帮帮我。预先感谢

2 个答案:

答案 0 :(得分:0)

最简单的方法是使Info实现可比。然后,您只需要实现处理案例的compareTo函数,如果它们相同,则将返回0;如果比较大于,则返回1;如果小于,则返回-1。比起您可以使用Collections.sort(arrList)https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

答案 1 :(得分:0)

假设您具有Java 8或更高版本,并进一步假设您同时具有这两个属性的getter:

arrList.sort(Comparator.comparing(Info::getCase_ID).thenComparing(Info::getStep_ID));