用不同长度的1D列表对Java中的2D arraylist进行排序
我一直在尝试使用自定义Comparator
对2D ArrayList
进行词典排序。但是每个1D列表的长度都不一样,所以我没有得到预期的结果。这是我的代码:
List<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> a1 = new ArrayList<Integer>();
ArrayList<Integer> a2 = new ArrayList<Integer>();
ArrayList<Integer> a3 = new ArrayList<Integer>();
ArrayList<Integer> a4 = new ArrayList<Integer>();
a1.add(1);
a2.add(1);
a2.add(3);
a3.add(1);
a3.add(2);
a3.add(3);
a.add(a1);
a.add(a2);
a.add(a3);
Collections.sort(a, new Comparator<ArrayList<Integer>>() {
@Override
public int compare(ArrayList<Integer> a, ArrayList<Integer> b) {
if (a.get(0) < b.get(0))
return 1;
return -1;
}
});
System.out.println(a);
所以输入是[[1], [1, 3], [1, 2, 3]]
我的输出是[[1, 2, 3], [1, 3], [1]]
预期的输出是[[1],[1,2,3],[1,3]]
请指出使代码正常工作所需的错误和添加内容
# 1 楼答案
首先确定要比较的列表中哪一个较短。例如,您可以使用方法
Math.min(int a, int b)
来确定这一点。然后将第一个列表的每个元素与第二个列表的相应元素进行比较。如果它们不相等,则返回此比较的结果。如果全部相等,则比较列表的长度并返回此值# 2 楼答案
看来你需要按字典顺序排列。Guava library的实用方法可以帮助您:
# 3 楼答案
您正在尝试定义一个自定义的}和
Comparator
排序2d整数ArrayList
,比较两个1dArrayList
的两个String
表示:例如,使用ArrayList
{[1, 3]
,您将比较字符串"1"
和"13"
。这可以使用下面的streams和String.valueOf
方法获得,我假设您没有空整数ArrayList
:这将产生您预期的有序输出