我有一个对象列表,其中每个对象都有变量previous和next,它们的类型为String
List testList=new ArrayList();
CustomObject o1=new CustomObject();
o1.setPrevious(null);
o1.setNext("a");
CustomObject o2=new CustomObject();
o2.setPrevious("a");
o2.setNext("b");
CustomObject o3=new CustomObject ();
o3.setPrevious("b");
o1.setNext("END");
testList.add(o3);
testList.add(o1);
testList.add(o2);
但是我需要按照o1,o2,o3的顺序得到它。我已经写了一个比较器来做到这一点,但我没有把它弄好
class OrderComparator implements Comparator{
public int compare(CustomObject obj1, CustomObject obj2) {
if(obj1.getPrevious()==null)
return -1;
else if(obj2.getPrevious()==null)
return 1;
else if(obj1.getNext()!=null&&obj2.getPrevious()!=null&& obj1.getNext().equals(obj2.getPrevious()))
return -1;
else if(obj1.getNext()!=null&&obj2.getPrevious()!=null&&obj2.getNext().equals(obj1.getPrevious()))
return 1;
else if(obj1.getNext().equals("END"))
return -1;
else if(obj2.getNext().equals("END"))
return 1;
else return 0;
}
} Collections.sort(testList,new OrderComparator());
答案 0 :(得分:0)
如果您确实需要使用Comparator
,最简单的方法是准备链接列表的数据:
int
变量(称之为order
或index
)添加到“对象”类index=i++;
compare
方法Object
。那不是好习惯。请使用较少混淆的名称。
答案 1 :(得分:0)
您需要在参数中仅传递一个对象,其他对象是equals()
被称为的对象,并且可以使用{{1例如
如果您想致电this
,您的方法应如下所示:
object1.equals(objec2)
答案 2 :(得分:0)
您的比较方法尚未完成。考虑以下有序的对象列表: obj1,obj2,obj3,obj4,obj5,END 如果我将obj1和obj5传递给您的比较方法,它们将无法正确处理。原因是给定一个对象o,你正在检查它的前一个,下一个,前一个对象的前一个对象和下一个对象的下一个对象。
使用以下伪代码可以解决此问题。
//Checking if o1 is greater
Object o=o1.previous;
while(true){
if ( o == null ) then o2 is not less than o1;
if(o.equals(o2)) then o2 is less than o1
else o=o.previous;
}
同样,检查o2是否更大