2016-07-14 11 views
-7

私はアプリを開発中です。私はArrayListをソートしたいと思います。私が直面している問題は、重複エントリがあるたびに並べ替えが失敗し、アプリケーションがクラッシュすることです。今のようAndroidでArrayListをソートする

レイアウトである:

not in sorted order

Iは、以下のように結果を希望する一方:

sorted

私は次のコードを書かれていますソート。

private void sortAlphaNumeric() { 
     /* Take a temporary list to store the original list */ 

     /* 
     * Remove any white spaces in the question number as it might 
     * interfere in sorting 
     */ 
     String[] trimmedArray = new String[m_quesNumber.size()]; 
     for (int i = 0; i < m_quesNumber.size(); i++) { 
      trimmedArray[i] = m_quesNumber.get(i).replace(" ", ""); 
     } 
     m_quesNumber = new ArrayList<String>(); 
     for (int i = 0; i < trimmedArray.length; i++) { 
      m_quesNumber.add(trimmedArray[i]); 
     } 

     ArrayList<String> temp_quesNumber = new ArrayList<String>(
       m_quesNumber); 


     /* Sort the original list */ 
     Collections.sort(m_quesNumber, new AlphanumComparator()); 


     /* Temporary arrays */ 
     String[] temp_prevQuesId = new String[m_quesId.size()]; 
     String[] temp_quesMaxMarks = new String[m_quesMaxScore.size()]; 
     Integer[] temp_quesOptional = new Integer[m_quesOptional.size()]; 

     for (int i = 0; i < m_quesNumber.size(); i++) { 
      int old_position = temp_quesNumber.indexOf(m_quesNumber.get(i)); 

      temp_prevQuesId[i] = m_quesId.get(old_position); 
      temp_quesMaxMarks[i] = m_quesMaxScore.get(old_position); 
      temp_quesOptional[i] = m_quesOptional.get(old_position); 
     } 

     m_quesId = new ArrayList<String>(); 
     m_quesMaxScore = new ArrayList<String>(); 
     m_quesOptional = new ArrayList<Integer>(); 

     for (int i = 0; i < temp_prevQuesId.length; i++) { 
      m_quesId.add(temp_prevQuesId[i]); 

      m_quesMaxScore.add(temp_quesMaxMarks[i]); 
      m_quesOptional.add(temp_quesOptional[i]); 
     } 


    } 
+0

なぜ、すべてのプロパティを1つのオブジェクトに入れてカスタムコンパレータを使用して並べ替えるだけではないのですか? – Krease

答えて

0

すべてのコードの代わりにこれを使用してください。

ArrayList<ArrayList<String>> data; //then initialize it 

// and pass it here. Sort based on column 0 
Collections.sort(data, new Comparator<ArrayList<String>>() { 
    @Override 
    public int compare(ArrayList<String> row1, ArrayList<String> row2) { 
     return row1.get(0).compareTo(row2.get(0)); 
    } 
}); 
+0

@lisa私の答えはあなたを助けましたか? – Marat

+0

まだクラッシュしていない – lisa

+0

@liseログにエラーをアップロードすることはできますか? – Marat

1

...のようなモデルクラスを作成します

class Result { 
    String qNo; 
    int marksScored; 
    int maximumMarks; 
    ... 
} 

とあなたが与えられたコードでそれを並べ替えることができた後Result

よう
List<Result> results = new ArrayList<>(); 

のArrayListには、必要なデータを追加し、作ります。

Collections.sort(results, new Comparator<Result>() { 
      @Override 
      public int compare(Result lhs, Result rhs) { 
       return lhs.qNo.compareToIgnoreCase(rhs.qNo); 
      } 
     }); 
+0

q文字列型はありません。 – lisa

+0

@lisa私は自分の答えを更新しました。それはあなたを助ける:) – RBK

+0

私は並べ替えの順序でそれを得る:( – lisa

関連する問題