当前位置: 首页 > 知识库问答 >
问题:

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

阴宏爽
2023-03-14

我有一个arraylist类似于
list >res=new arraylist();
经过一些处理后,我的res arraylist将包含
[1,1,2]
[1,2]
[1]
[2]
这些元素,但我希望排序的顺序类似于
[1]
[11]
[12]
[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;
        }    
    });

但它不起作用

共有1个答案

萧萧迟
2023-03-14

尝试比较列表的大小,而不是在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]]
 类似资料:
  • 问题内容: 我有以下清单 我想根据其子列表的长度对列表进行排序。结果应为: 问题答案: 使用和中可用的参数。它指定一个参数的功能,该参数用于从每个列表元素中提取比较键

  • 问题内容: 我有一个清单 我想按1. 2. 3.的顺序对其进行排序。 结果: 我在stackoverflow中看到了其他类似的问题,但是没有类似的问题或对我容易适用。 问题答案: 我们在这里所做的全部工作是通过为列表中的每个元素而不是整个列表返回一个整数来提供一个新的元素进行排序。我们 可以 使用内联三元表达式,但这会有点麻烦。

  • 示例: 我们的名单上有5个名字:凯文、汉斯、弗里茨、汉·索罗、彼得 我现在想要所有在顶部包含“han”的名字。 因此排序后的列表如下所示: Hans,Han Solo,Kevin,Fritz,Peter 到目前为止我所尝试的: 什么都没有,因为我没有线索,但我已经谷歌了,没有找到任何东西。 从列表中删除/添加项目不是一个选项,因为我正在使用(ControlsFX组件)中的列表,其中每个项目都具有会

  • 我的问题:1)我的set()方法返回一个未定义的类型错误2)我的比较工具从升序返回值,但我需要降序(从大到小) Equipment.java sort.java

  • 问题内容: 我正在使用python 2.7.3,并且尝试根据另一个列表的值顺序对字典列表进行排序。 IE浏览器: 根据listOne中值的顺序对listTwo进行排序,结果如下: 我最终需要输出此文本,因此为正确显示(以正确的顺序)所做的工作如下: 是否有某种lambda表达式可用于实现此目的?必须有一种更紧凑,更简单的方法来按我想要的顺序来获取它。 问题答案: 最简单的方法是使用来为您的词典列表