英文:
Sort List Object with another objects
问题
如果我有两个类:
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)进行排序呢?
英文:
Assume I have two Classes
public class TestA{
TestB testB;
String text;
SecondTest secondTest;
.
.
.
}
public class TestB{
int a;
int b;
}
Now I have a List with TestB
List<TestB> list1
If I want to sort the list I can do something like this:
list1.sort(Comparator.comparing(TestB::getA)
But what if I have a List with TestA
List<TestA> list2
How I sort to a or b (TestB)?
答案1
得分: 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);
}
};
}
当然,空值应该得到相应的处理。
英文:
That's an interesting question.
I don't know of any Java "native" solution for this kind of deep comparison.
But one idea is to use your own specific Comparator:
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);
}
};
}
Of couse null values should be handled accordingly.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论