我在排序List<List<Object>>
时遇到了问题。我创建了一个自定义比较器,我已经编写了代码来对数据进行排序。
public class CustomComparator implements Comparator<List<Object>>
{
static int i = 0;
public int compare(List<Object> o1, List<Object> o2) {
if (i < o1.size()) {
System.out.println(i);
Object obj1 = o1.get(i);
Object obj2 = o2.get(i);
if (obj1 != null && obj2 != null) {
int value = compareTo(obj1.toString(), obj2.toString());
if (value == 0) {
i++;
compare(o1, o2);
}
return value;
}
if (obj1 == null && obj2 != null) {
return -1;
}
if (obj1 != null && obj2 == null) {
return 1;
}
if (obj1 == null && obj2 == null) {
i++;
compare(o1, o2);
}
}
else{
i=0;
}
return 0;
}
public int compareTo(String value1, String value2) {
return value1.compareTo(value2);
}
}
我想要实现的逻辑是,首先它会尝试在第0个位置对Object进行排序。如果第0个位置的值相等或为null,则它将使用第2个位置的对象进行排序。等等。 如果其中任何一个值为null,那么该元素将向下移动。 但是,当我尝试使用我编写的代码进行排序时,它会得到排序,但不能按升序或降序排序。它只是洗牌了。
答案 0 :(得分:0)
在这里使用递归是没有意义的。只需在循环中迭代两个List
来比较它们的元素。
由于您忽略了递归调用返回的值,因此递归实现不起作用。使用静态变量来保持索引也是一个坏主意。如果两个线程同时使用Comparator
实例会发生什么?
答案 1 :(得分:0)
试试这个,
public int compare(List<Object> o1, List<Object> o2) {
public int compare(List<Object> o1, List<Object> o2) {
int i=0;
//TODO validation here for null check
while(i< o1.size()){
Object obj1 = o1.get(i);
Object obj2 = o2.get(i);
if (obj1 == null && obj2 != null) {
return -1;
}else if (obj1 != null && obj2 == null) {
return 1;
}else if(obj1 != null && obj2 != null){
int value = compareTo(obj1.toString(), obj2.toString());
if(value!=0){
return value;
}
}
i++;
}
return 0;
}
}
答案 2 :(得分:0)
String number= str.substring(Math.max(str.length() - 10, 0));
number ="0"+number;