我有2个对象:
public class GroupObject
{
String name;
...
}
public class AddressObject
{
String name;
...
}
我有他们两个的集合:
List<Object> _listValues;
在开始处理_listValues之前,我需要对对象进行排序:
所有GroupObjects应该在列表的顶部,AddressObjects应该在GroupObjects之后
在此顺序内部,必须按name属性以及AddressObjects对GroupObjects进行排序。
现在看起来像这样:
_listValues [0]-> AddressObject“ c-address”
_listValues [1]-> AddressObject“ b-address”
_listValues [2]-> GroupObject“ b-group”
_listValues [3]-> AddressObject“ a-address”
_listValues [4]-> GroupObject“ a-group”
_listValues [5]-> AddressObject“ d-address”
它看起来应该像这样:
_listValues [0]-> GroupObject“ a-group”
_listValues [1]-> GroupObject“ b-group”
_listValues [2]-> AddressObject“ a-address”
_listValues [3]-> AddressObject“ b-address”
_listValues [4]-> AddressObject“ c-address”
_listValues [5]-> AddressObject“ d-address”
我如何才能对_listValues进行排序以实现这一目标?
最佳答案
您可以使用List#sort
:
_listValues.sort((o1, o2) -> {
if (o1 instanceof GroupObject && o2 instanceof AddressObject) {
return 1;
} else if (o1 instanceof AddressObject && o2 instanceof GroupObject) {
return -1;
} else if (o1 instanceof GroupObject && o2 instanceof GroupObject) {
GroupObject g1 = (GroupObject) o1;
GroupObject g2 = (GroupObject) o2;
return g1.getName().compareTo(g2.getName());
} else {
AddressObject a1 = (AddressObject) o1;
AddressObject a2 = (AddressObject) o2;
return a1.getName().compareTo(a2.getName());
}
});