如何根据大小将两个arraylists排序成一个新的arraylist

时间:2009-06-18 08:11:50

标签: java

我有两个对象,每个对象都有一个id和一个列表。我希望有一个第三个arraylist根据列表大小排序这个对象。并且仍然有相关的id和列表

1 个答案:

答案 0 :(得分:1)

这是方法:

  1. 创建一个Comparator,可以比较两个“id / list对” - 在这种情况下,我们比较列表组件的列表大小。

  2. 创建ArrayList这些“ID /列表对”。

  3. 根据ArrayList,使用Collections.sort方法对Comparator进行排序。

  4. 如果我理解正确,则有一个id / list对。这是我制作的一个:

    class IdListPair {
      int id;
      List<?> list;
    
      IdListPair(int id, List<?> list) {
        this.id = id;
        this.list = list;
      }
    
      public String toString() {
        return "id: " + id + "; list: " + list;
      }
    }
    

    IdListPair提供了一个构造函数来创建id / list对,以及一个toString方法,稍后将用它来显示排序结果。

    然后,我们将创建一个创建ArrayList的部分,并使用Comparator对列表进行排序:

    List<IdListPair> pairList = new ArrayList<IdListPair>();
    pairList.add(new IdListPair(0, Arrays.asList(1, 2, 3)));
    pairList.add(new IdListPair(1, Arrays.asList(1)));
    pairList.add(new IdListPair(2, Arrays.asList(1, 2)));
    
    System.out.println("Before: " + pairList);
    
    Collections.sort(pairList, new Comparator<IdListPair>() {
      public int compare(IdListPair o1, IdListPair o2) {
        return o1.list.size() - o2.list.size();
      }
    
      public boolean equals(Object o) {
        return false;
      }
    });
    
    System.out.println("After: " + pairList);
    

    首先,使用ArrayList创建IdListPair,其中包含不同长度的列表。

    然后,Collections.sort方法根据Comparator提供的规则执行排序。实施Comparator的班级需要提供compareequals方法。

    此处制作了Comparator,以便比较size方法中每个list对象所包含的IdListPair的{​​{3}}。 equals方法是一种虚方法,因为这里没有使用它。

    大部分工作都是用正确的compare方法编写的,因此Collections.sort的排序器可以正确排序列表。

    结果如下:

    Before: [id: 0; list: [1, 2, 3], id: 1; list: [1], id: 2; list: [1, 2]]
    After: [id: 1; list: [1], id: 2; list: [1, 2], id: 0; list: [1, 2, 3]]