在Java中,我想知道如何在特定列上对矢量矢量进行排序,其中一个矢量用作行,一个矢量用于保存所有行矢量,例如
Vector row = new Vector();
Vector main = new Vector();
row.add("Column1");
row.add("Column2");
row.add("Column3");
main.add(row);
然后对其中一列中的变量进行排序,例如Column2
。
谢谢
答案 0 :(得分:8)
你可以编写一个Comparator<Vector>
,根据第二个元素比较两个Vector
个对象,然后使用Collections.sort(List,Comparator)
。
但是从长远来看,如果你摆脱Vector
- in - Vector
构造并替换内部{{1},你将会好得多。使用自定义类来表示您希望它表示的数据。然后你会写一个Vector
,这将更容易解释(“哦,这个比较器根据名字进行比较”而不是“为什么这个比较器采用索引1处的元素并比较它?那是什么意思?“)。
答案 1 :(得分:4)
我想你想要在'main'而不是'row'中排序:
Vector<String> row = new Vector<String>();
Vector<Vector<String>> main = new Vector<Vector<String>>();
Collections.sort(main, new Comparator<Vector<String>>(){
@Override public int compare(Vector<String> v1, Vector<String> v2) {
return v1.get(1).compareTo(v2.get(1)); //If you order by 2nd element in row
}});
答案 2 :(得分:2)
(为什么人们仍然使用Vector
并避免使用泛型?我应该在SO上提出这个问题......;)
首先让我建议一个现代的重构:
List<List<String>> main = new ArrayList<List<String>>();
List<String> row = new ArrayList<String>();
row.add("Column1");
row.add("Column2");
row.add("Column3");
main.add(row);
现在我们可以查看将Collections.sort(Comparator<T> comp)
进行排序的main
。我们只需实现一个Comparator类,它能够根据我们的参数比较两行 - 在我们的例子中是某一列:
public class MyComparator implements Comparator<List<String>> {
private int columnIndex = 0;
public MyComparator(int columnIndex) {this.columnIndex = columnIndex;}
@Override
public int compare(List<String> thisRow, List<String> otherRow) {
return thisRow.get(columnIndex).compareTo(otherRow.get(columnIndex));
}
}
像这样使用比较器:
Collections.sort(main, new MyComparator(1)); // will sort according to "column2"
注意 - 这是一个不完整的实现,我不检查索引值是否有效以及是否所有行都具有相同的大小..应该在生产代码中完成。
答案 3 :(得分:0)
矢量可能不是你桌子的最佳代表。看看Glazed Lists。
答案 4 :(得分:0)
创建一个可重用的Comparator,可用于对Vector(或List或Array)中的任何索引进行排序。 Column Comparator为您完成此操作。