Java比较器按多个字段排序,字段计数应该是动态的

标签 java sorting collections comparator

我有ArrayList<ArrayList<String>>数据列表。我想按多个字段对列表进行排序。如果我知道排序字段的数量,我就没有问题。例如,如果我想按索引位于此位置 (3,2,5) 的字段对列表进行排序。示例在这里:

public int compare(List<String> rowData1, List<String> rowData2) {
    String[] arr = { "2", "3", "4", "1" };
        String s1 = rowData1.get(Integer.parseInt(arr[0]));
            String s2 = rowData2.get(Integer.parseInt(arr[0]));
            int comp = s1.compareTo(s2);
            if (comp != 0) {
                result = comp;

            } else {

                String z1 = rowData1.get(Integer.parseInt(arr[1]));
                String z2 = rowData2.get(Integer.parseInt(arr[1]));
                int comp1 = z1.compareTo(z2);
                if (comp1 != 0) {
                    result = comp1;
                } else {

                    String c1 = rowData1.get(Integer.parseInt(arr[2]));
                    String c2 = rowData2.get(Integer.parseInt(arr[2]));
                    int comp2 = c1.compareTo(c2);
                    if (comp2 != 0) {
                        result = comp2;
                    } else {
                        String b1 = rowData1.get(Integer.parseInt(arr[3]));
                        String b2 = rowData2.get(Integer.parseInt(arr[3]));
                        result = b1.compareTo(b2);
                    }
                }
            }
}

我想要动态(可配置)数组。等待您的建议。

最佳答案

我的意思是这样的:

public class Cumpare implements Comparator<List<String>> {

private final int[] indexes;

public Cumpare(final int[] indexes) {
    this.indexes = indexes;
}


@Override
public int compare(final List<String> o1, final List<String> o2) {
    int value = 0;
    for(int i : indexes){
        value = o1.get(i).compareTo(o2.get(i));
        if (value!=0) break;                        
    }
    return value;
}
}

关于Java比较器按多个字段排序,字段计数应该是动态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28316081/

相关文章:

java - 有没有办法在Intellij IDEA中查看引用的jar(库)的使用情况?

java - 我如何打破这个循环?

ios - 按键排序基于 NSDictionary 的 UITableView

c# - 如何在不尊重某些字符的情况下对列表进行排序?

string - 流字符串值的近似直方图(卡片目录算法?)

java - 关于自定义比较器

java - Spring MVC 3.2 : NoClassDefFoundError: java/util/Deque

java - Java 中的线程安全双向关联

arrays - 反转多维数组 - 函数式编程风格

java - Java 中查找 ArrayList 中的对象