我有一个'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 ...
输出错误。帮帮我。预先感谢
答案 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));