2011-04-11 73 views
3

我想弄清楚如何使排序功能,將按降序排列數組。創建一個算法,可以排序字符串/整數數組

public void dsort(String field) throws DataSetException { 
    int front = 0; 
    int findex = -1; 

    String[] tosort = new String[50]; 
    for (int i = 0; i < filedata[0].length; i++) { 
     if (field.equalsIgnoreCase(filedata[0][i])) { 
      findex = i; 
     } 
    } 
    if (findex == -1) { 
     throw new DataSetException(); 
    } else { 
     for (int k = 0; k < getNumRecords(); k++) { 
      if (filedata[k][findex] != null) { 
       tosort[front] = filedata[k][findex]; 
       front++; 
      } 
     } 
     Comparator comparator = Collections.reverseOrder(); 
     Arrays.sort(tosort, comparator); 
     System.out.println(Arrays.asList(tosort)); 
    } 
} 

這樣做是通過創建從一個數組的數組,這就是我想要它做的考慮元素的數組。 但是,我排序的輸出是類似於32,3,25,20,2,1000,1等等。 這些「整數」被視爲字符串,並且這個排序功能應該也能夠將單詞排序爲字符串。我想我應該嘗試使用可比較的,但我不確定如何在這種情況下實施它。

回答

2

如果一切確實是一個數字,那麼你不希望將它們存儲爲字符串,將它們存儲爲數字,然後使用數字排序。

如果在另一方面,你有一個字符串,其中一些數字的組合,並且其中的一些字母,我建議使用類似的AlphanumComparator,可用 here

+0

我遇到了麻煩...... – john 2011-04-11 19:47:41

+0

哪部分?將數據存儲爲數字,將數據存儲在數據庫中或者實現AlphanumComparator? – JohnnyO 2011-04-12 13:28:59

0

使用Google Guava

List<String> sortedList = Ordering.natural().reverse().onResultOf(new Function<String, Integer>() { 
    @Override public Integer apply(String input) { 
    return Integer.valueOf(input); // assumes input is always valid 
    } 
}).immutableSortedCopy(Iterables.concat(listOfLists)); 

或類似的東西。 Iterables.concat將採用可迭代的迭代器,並將它變成一個迭代器。您可能需要將陣列數組轉換爲List列表。

相關問題