有列表清单。例如
{{ 4, 5, 3, 1, 2},
{14, 15, 13, 11, 12},
{24, 25, 23, 21, 22}}
我需要对这些列表中的值进行排序,以便根据第一个List对每个List的值进行排序。所以结果应该是
{{ 1, 2, 3, 4, 5},
{11, 12, 13, 14, 15},
{21, 22, 23, 24, 25}}
在Java中有效实现这一目标的最佳方法是什么?我尝试以某种方式考虑使用Collections.sort,但我不知道。任何帮助和建议将不胜感激
UPD:对不清楚的问题,我会尽力澄清。我有矩阵,我需要对矩阵的列进行排序。我应该在特定的行(我的例子中的第一行)上对它们进行排序。但矩阵表示为列表列表(不是二维数组)。矩阵可以足够大。而且我不想自己实现排序(因为我相信Java Collections / Arrays sort()方法可以有效地实现)。正如我已经说过的,矩阵可能很大,所以我不想在排序算法的每一步中重新排列每个List中的元素。
我看到的只是排序第一个列表得到一些排列(我可以使用sort()方法实现这个吗?)。然后根据这种排列,我想重新排列矩阵中的其他元素。但我不确定这是一个好方法。
答案 0 :(得分:1)
如果我正确地阅读您的问题,您希望对父列表结构中的每个内部列表进行排序。然后,使用自定义比较器检查订单。
对父列表中的子列表进行排序
for (List l : parentList) {
Collections.sort(l);
}
检查以确保列表已按顺序
Collections.sort(parentList, new ListComparator<List<Integer>>())
自定义比较器,用于评估每个列表的第一个索引
public ListComparator extends Comparator<List<Integer>> {
@Override
public int compareTo(List<Integer> thisList, List<Integer> thatList) {
return thisList.get(0).compareTo(thatList.get(0);
}
}
答案 1 :(得分:0)
Collections.sort()是一种合理的方法。您需要实现一个自定义的Comparator对象并遍历您的外部列表,对每个内部列表进行排序。如有必要,您还可以实现Comparator来对外部列表中的列表进行排序。
This tutorial有一个很好的例子。
答案 2 :(得分:0)
查看Column Comparator。它允许您对List的任何列进行排序。因此,您只需将列作为参数传递给ColumnComparator
,而不是为指定列创建不同的Comparator。
ColumnComparator
可用于对数组或列表进行排序。