簡體   English   中英

如何對矢量矢量進行排序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM