繁体   English   中英

如何根据自定义所需的顺序对包含列表作为元素的数组列表进行排序

[英]How to sort array list contains list as elements based on custom required order

我有一个数组列表,就像
List<List<Integer>> res = new ArrayList();
经过一些处理后,我的 res arraylist 将包含
[1, 1, 2]
[1, 1]
[1, 2]
[1]
[2]
这些元素,但我想要看起来像的排序顺序
[1]
[1 1]
[1 1 2]
[1 2]
[2]

所以我所做的是

   Collections.sort(res,new Comparator<List<Integer>>(){
        public int compare(List<Integer> o,List<Integer> s){
            int c=0;
            //c=o.size().compareTo(s.size());
            //if(c==0){
                for(int i=0;i<Math.min(s.size(),o.size());i++){
                    c=o.get(i).compareTo(s.get(i));
                    if(c!=0) return c;
                }
           //}
        
            return c;
        }    
    });

但它不起作用

尝试比较列表的大小,而不是在compare结束时只返回c

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Main {

    public static void main(String[] args) {
        List<List<Integer>> list = new ArrayList<>();
        list.add(new ArrayList<>(Arrays.asList(1, 1, 2)));
        list.add(new ArrayList<>(Arrays.asList(1, 1)));
        list.add(new ArrayList<>(Arrays.asList(1, 2)));
        list.add(new ArrayList<>(Arrays.asList(1)));
        list.add(new ArrayList<>(Arrays.asList(2)));
        
        System.out.printf("Before: %s%n", list);
        
        Collections.sort(list, new Comparator<List<Integer>>() {
            public int compare(List<Integer> o, List<Integer> s) {
                for (int i = 0; i < Math.min(o.size(), s.size()); i++) {
                    int c = o.get(i).compareTo(s.get(i));
                    if (c != 0) {
                        return c;
                    }
                }
                return Integer.compare(o.size(), s.size());
            }
        });
        
        System.out.printf("After: %s%n", list);
    }

}

输出:

Before: [[1, 1, 2], [1, 1], [1, 2], [1], [2]]
After: [[1], [1, 1], [1, 1, 2], [1, 2], [2]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM