我在给定类中进行排序时遇到问题,数据没有被排序,这里列表的大小不等,但list中有list1 .FP是一个具有键和值成员的bean类。数据没有被排序。我希望list1以相同的顺序在列表末尾添加额外的键
public class MyList {
public static void main(String[] args) {
FP f = new FP();
f.setKey("s");
f.setValue("he");
FP f1 = new FP();
f1.setKey("t");
f1.setValue("she");
List<FP> list = new ArrayList<FP>();
list.add(f);
list.add(f1);
FP f2 = new FP();
f2.setKey("t");
f2.setValue("he");
FP f3 = new FP();
f3.setKey("s");
f3.setValue("she");
FP f4 = new FP();
f4.setKey("u");
f4.setValue("she");
List<FP> list1 = new ArrayList<FP>();
list1.add(f2);
list1.add(f3);
list1.add(f4);
final Map<FP, Integer> indices = new HashMap<FP, Integer>();
for (int i = 0; i < list.size(); i++) {
indices.put(list.get(i), i);
}
Collections.sort(list1, new Comparator<FP>() {
public int compare(FP o1, FP o2) {
int index1 = (Integer) (indices.containsKey(o1) ? indices
.get(o1) : +1);
int index2 = (Integer) (indices.containsKey(o2) ? indices
.get(o2) : +1);
return index1 - index2;
}
});
for (int i = 0; i < list1.size(); i++) {
System.out.println("the data is" + list1.get(i).getKey());
}
}
}
答案 0 :(得分:3)
我猜您的问题与FP对象没有覆盖equals()
和hashCode()
方法有关,因为(indices.containsKey(o1))
可能会返回false。
当您使用对象作为集合的内容并希望使用contains()
(或)get(object)
等调用进行查找时,如果您不覆盖equals()
和{{1}查找可能会失败。
示例:
hashCode()