Java类对象排序和分组
我想对ClassVO对象列表进行如下排序
ClassVO参数->;身份证代码
样本数据:
ID Code
A1 A1,AA1
B1 B1,BB1
C1 C1,CC1
D1 D1,DD1
B1 B2,BB2
A1 A2,AA2
C1 C2,CC2
D1 D2,DD2
在我的ClassVO列表对象中,上面的示例数据以未排序的方式添加。例如,列表1包含B1,列表1包含D1,列表1包含A1,列表1包含C1。每次的订单都会有所不同
现在我想对ClassVO列表对象进行如上排序。也就是说,在我整理我的记录之前,我想按这样的顺序分组(首先我想分组A1的代码,然后是B1的代码,C1的代码和D1的代码,而分组的代码应该是升序)。分组之后,我想要我的classVO列表对象,比如A1、B1、C1、D1
编辑:
我在这里粘贴代码
public static void main(String[] args) {
List<TestVo> vos = new ArrayList<TestVo>();
TestVo testVo1 = new TestVo();
testVo1.setCode("b");
testVo1.setId("B_NIT_DEPT");
vos.add(testVo1);
TestVo testVo2 = new TestVo();
testVo2.setId("C_NIT_FUNC");
testVo2.setCode("NIT3");
vos.add(testVo2);
TestVo testVo4 = new TestVo();
testVo4.setCode("NIT4d");
testVo4.setId("D_NIT_DEPT");
vos.add(testVo4);
TestVo testVo = new TestVo();
testVo.setCode("NIT1");
testVo.setId("A_NIT");
vos.add(testVo);
TestVo testVo3 = new TestVo();
testVo3.setCode("a");
testVo3.setId("B_NIT_DEPT");
vos.add(testVo3);
Collections.sort(vos, new MyComparable());
for (TestVo obj: vos) {
System.out.println(obj.getId());
System.out.println(obj.getCode());
}
}
public class MyComparable implements Comparator<TestVo>{
@Override
public int compare(TestVo vo1, TestVo vo2) {
int ret = 0;
if(vo1.getId().compareTo(vo2.getId()) != 0){
ret = vo1.getId().compareTo(vo2.getId());
}
return ret;
}
}
我的输出是:
identifier=A_NIT
Code=NIT1
identifier=B_NIT_DEPT
Code=b
identifier=B_NIT_DEPT
Code=a
identifier=C_NIT_FUNC
Code=NIT3
identifier=D_NIT_DEPT
Code=NIT4d
但我的预期输出是:
identifier=A_NIT
Code=NIT1
identifier=B_NIT_DEPT
Code=a
identifier=B_NIT_DEPT
Code=b
identifier=C_NIT_FUNC
Code=NIT3
identifier=D_NIT_DEPT
Code=NIT4d
我想按照预期输出部分给出的输出
# 1 楼答案
您可以使用java Comparable或Comparator来实现这一点。如果您使用的是Java 8,那么就不需要在单独的类中实现比较或比较方法。可以很容易地使用lambda表达式来实现这一点
谢谢