用其他对象对列表对象进行排序

时间:2020-08-27 14:34:19

标签: java sorting object

假设我有两个班级

public class TestA{
   TestB testB;
   String text;
   SecondTest secondTest;
               .
               .
               .
}

public class TestB{
   int a;
   int b;
}

现在我有一个列表,其中包含TestB List<TestB> list1

如果要对列表进行排序,可以执行以下操作:

list1.sort(Comparator.comparing(TestB::getA)

但是,如果我有一个TestA List<TestA> list2的列表,该怎么办 我如何对a或b(TestB)进行排序?

1 个答案:

答案 0 :(得分:0)

这是一个有趣的问题。 对于这种深度比较,我不知道任何Java“本机”解决方案。 但是一个想法是使用您自己的特定比较器:

    List<TestA> list2 = Arrays.asList( new TestA(new TestB(2, 20)),  new TestA(new TestB(1, 10)),  new TestA(new TestB(3, 30)) ); 
    list2.sort( getComparator() );
    public Comparator<TestA> getComparator() {      
        return new Comparator<TestA>() {
            @Override
            public int compare(TestA obj1, TestA obj2) {
                int obj1A = obj1.getTestB().getA();
                int obj2A = obj2.getTestB().getA();
                
                return Integer.compare(obj1A, obj2A);
            }
        };
    } 

当然应该对空值进行处理。