如何为其值排序双数组列表?

时间:2017-10-07 13:37:44

标签: java android arrays list sorting

我有我的

ArrayList<ArrayList<String>> list = 
    [["12","09","2017","Event n 1"],
     ["14","07","2017","Event n 2"],
     ["18","03","2017","Event n 3"]
    ]

我怎样才能将它排序为当天(2017年7月14日之后(2017年7月14日)和之后(2017年9月12日)的第一个列表)?

1 个答案:

答案 0 :(得分:2)

您可以创建一个自定义比较器,将每个相关元素解析为int,然后对它们进行比较:

list.sort(Comparator.comparingInt((List<String> x) -> Integer.parseInt(x.get(2)))
            .thenComparingInt(x -> Integer.parseInt(x.get(1)))
            .thenComparingInt(x -> Integer.parseInt(x.get(0))));

编辑:
如果你不能使用Java 8的功能,你仍然可以这样做,但它会有点笨拙:

Collections.sort(list, new Comparator<List<String>>() {
    @Override
    public int compare(List<String> o1, List<String> o2) {
        int retVal = Integer.compare(getIntByIndex(o1, 2), getIntByIndex(o2, 2));
        if (retVal != 0) {
            return retVal;
        }

        retVal = Integer.compare(getIntByIndex(o1, 1), getIntByIndex(o2, 1));
        if (retVal != 0) {
            return retVal;
        }

        return Integer.compare(getIntByIndex(o1, 0), getIntByIndex(o2, 0));
    }

    private int getIntByIndex(List<String> sublist, int index) {
        return Integer.parseInt(sublist.get(index));
    }
});