在java中,整数数组列表的排序数组列表不取决于它们的长度

在java中,整数数组列表的排序数组列表不取决于它们的长度,java,Java,我想对整数的ArrayList进行排序,它们的长度不同 我试试这里的密码 它是有效的,但它的优先顺序是长度优先,而不是值优先 例如: 2,2,2,3 2,2,3,4 2,2,90 其输出如下: 2,2,90 2,2,2,3 2,2,3,4 而我想要的订单: 2,2,2,3 2,2,3,4 2,2,90 有谁能帮我解决这个问题吗?您正在查看的代码只比较每个列表中的第一个数字,因此它们最终的顺序实际上不是按大小排列的;这是武断的 关键是这一部分 public int compare(List<

我想对整数的ArrayList进行排序,它们的长度不同
我试试这里的密码 它是有效的,但它的优先顺序是长度优先,而不是值优先


例如:
2,2,2,3
2,2,3,4
2,2,90
其输出如下:
2,2,90
2,2,2,3
2,2,3,4
而我想要的订单:
2,2,2,3
2,2,3,4
2,2,90

有谁能帮我解决这个问题吗?

您正在查看的代码只比较每个列表中的第一个数字,因此它们最终的顺序实际上不是按大小排列的;这是武断的

关键是这一部分

public int compare(List<Integer> o1, List<Integer> o2) {
    return o1.get(0).compareTo(o2.get(0));
}
public int比较(列表o1,列表o2){
返回o1.get(0),与(o2.get(0))进行比较;
}
你需要像这样的东西

public int compare(List<Integer> o1, List<Integer> o2) {
    for (int i = 0; i < o1.size(); i++) {
        if (o1.get(i).compareTo(o2.get(i)) != 0) {
            return o1.get(i).compareTo(o2.get(i));
        }
    }
}
public int比较(列表o1,列表o2){
对于(int i=0;i

我留下了这个不完整的部分,因为我认为这应该是对你有教育意义的,如果我给你完整的答案,就没有什么可以完成的。我在这里编写的代码只会正确地比较相同长度的列表。如果第二个列表较长,则会忽略额外的值,如果第一个列表较长,则会出错。我将把它作为解决这些问题的练习留给您。:-)

您可以通过两个步骤完成:

  • 借助于
    forEach(Collections::Sort)
    方法,将数组从最小值排序到最大值

  • 对数组进行比较并按特定顺序排列


  • 是的,这将对每个单独的列表进行排序,但不会对列表进行排序,而是相互比较。我在上面的代码中添加了第二步,比较排序后的数组,并最终按照需求顺序对它们进行排序。
    List<List<Integer>> listOLists = Arrays.asList(
            Arrays.asList(2, 90, 2),
            Arrays.asList(3, 2, 4, 2),
            Arrays.asList(2, 2, 3, 2));
    
    //first step:   
    listOLists.forEach(Collections::sort);
    
    //second step:
    Collections.sort(listOLists, (l1, l2) -> {
        for (int i = 0; i < listOLists.size(); i++) {
            if (l1.get(i) != l2.get(i)) {
                return l1.get(i) - l2.get(i);
            }
        }
        return l1.get(0).compareTo(l2.get(0));
    });
    System.out.println(listOLists);
    
    [[2, 2, 2, 3], [2, 2, 3, 4], [2, 2, 90]]