有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何根据类类型的arraylist中的两个元素(两列)对其进行排序

我有一个类型为'class'(Info)的arraylist(arrList)。类“Info”有两个名为“case”和“step”的长类型属性。我需要通过比较class 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

所以,这里我需要类似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) 个答案

  1. # 1 楼答案

    最简单的方法是使信息实现具有可比性。然后,您只需实现compareTo函数,该函数处理案例,如果它们相同,则返回0;如果比较大于,则返回1;如果小于,则返回-1。而不仅仅是使用集合。排序(arrList)https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

  2. # 2 楼答案

    假设您拥有java 8或更高版本,并进一步假设您拥有这两个属性的getter:

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