Java 将数组的顺序复制到新数组
我有一个对象的Java列表,它定期被清除,然后用数据库中对象的更新版本重新加载。在重新加载之前,用户可能已经选择以某种方式对列表进行排序。我需要找到一个算法,将前一个列表的顺序应用于新列表 我不能使用比较器,因为对象可能有效地处于随机顺序 这是我的方法存根:Java 将数组的顺序复制到新数组,java,sorting,Java,Sorting,我有一个对象的Java列表,它定期被清除,然后用数据库中对象的更新版本重新加载。在重新加载之前,用户可能已经选择以某种方式对列表进行排序。我需要找到一个算法,将前一个列表的顺序应用于新列表 我不能使用比较器,因为对象可能有效地处于随机顺序 这是我的方法存根: public static List<RetrievedPage> copyPreviousListOrderToFreshList(List<RetrievedPage> previousCopyOfLis
public static List<RetrievedPage> copyPreviousListOrderToFreshList(List<RetrievedPage> previousCopyOfList, List<RetrievedPage> freshCopyOfList)
{
for (RetrievedPage retrievedPage : previousCopyOfList)
{
//reordering, but how?
}
return freshCopyOfList;
}
公共静态列表copyPreviousListOrderToFreshList(列表previousCopyOfList,列表freshCopyOfList)
{
for(RetrievedPage RetrievedPage:previousCopyOfList)
{
//重新排序,但如何?
}
返回FreshCopyof列表;
}
提前感谢,,
Barry您仍然可以使用比较器,只需根据项目在上一个列表中的位置进行比较即可
Collections.sort(freshCopyOfList, new Comparator<RetrievedPage>() {
public int compare(RetrievedPage o1, RetrievedPage o2) {
int firstPagePosition = previousCopyOfList.indexOf(o1);
int secondPagePosition = previousCopyOfList.indexOf(o2);
if (secondPagePosition == -1) return -1;
if (firstPagePosition == -1) return 1;
return firstPagePosition - secondPagePosition;
}
});
Collections.sort(freshCopyOfList,new Comparator(){
公共整数比较(检索页o1,检索页o2){
int firstPagePosition=previousCopyOfList.indexOf(o1);
int secondPagePosition=列表的上一个副本索引(o2);
if(secondPagePosition==-1)返回-1;
if(firstPagePosition==-1)返回1;
返回firstPagePosition-secondPagePosition;
}
});
当然,如果列表中有不同的对象,则不应忘记覆盖比较对象中的
equals()
和hashCode()
方法。否则,indexOf()
方法将查找完全相同的对象,并且不会以您想要的方式测试它们的相等性。谢谢Malcolm-我得到了一条JUnit绿线,因此它可以工作。我对Comparator没有太多的经验,所以我必须想一想它是如何工作的!我想我明白了。这让我有点困惑,因为fresh列表中的对象是新对象,那么indexOf如何在上一个列表中找到它们呢。但是,调用索引equals(),我已经在RetrievedPage中重写了它。是的,正确:您应该重写equals()
,这样indexOf()
方法就可以知道如何查找类似的对象,而不是完全相同的对象。我应该在回答中说出来,我会补充这些信息。