在java中,整数数组列表的排序数组列表不取决于它们的长度
我想对整数的ArrayList进行排序,它们的长度不同在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<
我试试这里的密码 它是有效的,但它的优先顺序是长度优先,而不是值优先
例如:
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]]