我有两个对象,每个对象都有一个id和一个列表。我希望有一个第三个arraylist根据列表大小排序这个对象。并且仍然有相关的id和列表
答案 0 :(得分:1)
这是方法:
创建一个Comparator
,可以比较两个“id / list对” - 在这种情况下,我们比较列表组件的列表大小。
创建ArrayList
这些“ID /列表对”。
根据ArrayList
,使用Collections.sort
方法对Comparator
进行排序。
如果我理解正确,则有一个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
的班级需要提供compare
和equals
方法。
此处制作了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]]