我有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());
        }
    });

10-06 11:55