有 Java 编程相关的问题?

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

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) 个答案

  1. # 1 楼答案

    您可以使用java Comparable或Comparator来实现这一点。如果您使用的是Java 8,那么就不需要在单独的类中实现比较比较方法。可以很容易地使用lambda表达式来实现这一点

    Collections.sort(listOfClassVO , (ClassVO vo1, ClassVO vo2) -> vo1.getID().compareTo(vo2.getID()));
    

    谢谢