繁体   English   中英

对对象的ArrayList的ArrayList进行排序

[英]Sort ArrayList of ArrayList of objects

我在使用比较器对对象的ArrayList的ArrayList进行排序时遇到麻烦,我有以下简单代码:

        ArrayList<ArrayList<Object>> office = new ArrayList<ArrayList<Object>>(15);
        ArrayList<Object> objectArrayList1 = new ArrayList<Object>(15);
        objectArrayList1.add("Denver");
        objectArrayList1.add(108);
        office.add(objectArrayList1);

        ArrayList<Object> objectArrayList2 = new ArrayList<Object>(15);
        objectArrayList2.add("NewYork");
        objectArrayList2.add(109);
        office.add(objectArrayList2);

       [[Denver, 118], [NewYork, 109]]

如何按数字或字符串排序?

您将不得不使用Collections.sort()覆盖compare()方法并创建一个新的Comparator。 因为您使用的是对象,所以编写通用的分类器将很困难。 这是自定义对象的arrayList上的排序示例

 Collections.sort(finalList, new Comparator<FinalAccount>()
        @Override
        public int compare(FinalAccount o1, FinalAccount o2) {
            Double o1Double = o1.reductionAmount;
            Double o2Double = o2.reductionAmount;
            return o1Double.compareTo(o2Double);
        }

    });

但这又仅适用于一种类型的对象,泛型会使事情感到困惑,因为您可能拥有任何类型的对象。

您的数据模型有点差。 假设您要存储城市及其相关“得分”的数据以供排序,则需要一个既包含城市又包含城市得分的对象列表。 该实体必须具有可比性。

例如

Team implements Comparable {
 String city;
 int score;
 Team(String city, int score) {
  this.city = city;
  this.score = score; 
 }

@Override
 public int compareTo(Team other) {
   return this.score - other.score;
 } 
}

现在您可以对团队的ArrayList进行排序

List<Team> teams = Arrays.asList(new Team("New York", 101), new Team("Denver", 108));
Collections.sort(teams); // sorts in-place

您还可以使用自定义比较器,例如

Collections.sort(teams, new Comparator<Team>(){
@Override
public int compare(Team t1, Team t2) {
 return t1.city.compareTo(t2.city);
}
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM