java - 列表<列表<对象>>排序

标签 java arraylist comparator

我在排序时遇到问题 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 个位置的对象进行排序。如果第 0 个位置的值相等或为 null,则它将使用第 2 个位置的对象进行排序等。 如果其中一个值为空,则该元素将向下移动。 但是,当我尝试使用我编写的代码进行排序时,它会进行排序,但既不是升序也不是降序。它只是被洗牌了。

最佳答案

这里使用递归是没有意义的。只需在循环中迭代两个 List 即可比较它们的元素。

您的递归实现不起作用,因为您忽略了递归调用返回的值。使用静态变量来保存索引也是一个坏主意。如果您的 Comparator 实例同时被两个线程使用,会发生什么?

关于java - 列表<列表<对象>>排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37043378/

相关文章:

java - java中的比较器链

java - 按字母顺序对集合进行排序,集合中的字母以逗号分隔

java - 如何在pom中配置maven-release-plugin来模拟命令行上的-Dgoals=deploy

java - 获取调用方法的注解值

java - 最终静态数组列表在函数中发生了变化

java - Android Java 对象列表与图像

java - 使用包装类来实现 Java 中的 typedef 等效项;我必须公开类变量吗?

java - 如何从 static void 方法返回 int 数据到 main 方法?

java - 调用和调用 w.r.t.任何计算机语言

java - 最少的代码,缩短表达