![](/img/trans.png)
[英]In Java, how do I sort files in a vector into 3 different vectors according to the file's last modified date?
[英]How to sort a Vector of Vectors?
在Java中,我想知道如何在特定列上對向量的向量進行排序,其中一個向量用作行,並且一個向量用於保存所有行向量,例如
Vector row = new Vector();
Vector main = new Vector();
row.add("Column1");
row.add("Column2");
row.add("Column3");
main.add(row);
然后對其中一列中的變量進行排序,例如Column2
。
謝謝
您可以編寫一個Comparator<Vector>
,它根據第二個元素比較兩個Vector
對象,並使用Collections.sort(List,Comparator)
。
但是從長遠來看,如果你擺脫Vector
-in- Vector
構造並用一個代表你想要它代表的數據的自定義類替換內部Vector
,你會好得多。 然后你會寫一個Comparator<MyClass>
,這將更容易解釋(“哦,這個比較器根據名字進行比較”而不是“為什么這個比較器采用索引1的元素並比較它?那是什么?意思?”)。
我想你想要在'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
}});
(為什么人們仍然使用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"
注意 - 這是一個不完整的實現,我不檢查索引值是否有效以及所有行是否具有相同的大小..應該在生產代碼中完成。
矢量可能不是您表的最佳表示。 看看Glazed Lists 。
創建一個可重用的Comparator,可用於對Vector(或List或Array)中的任何索引進行排序。 Column Comparator為您完成此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.