2016-07-14 6 views
-7

Ich entwickle eine App. Ich möchte die ArrayList sortieren. Das Problem, mit dem ich konfrontiert bin, ist, dass bei jeder doppelten Eingabe die Sortierung fehlschlägt und die App abstürzt.Sortierung ArrayLists in Android

Das Layout ab jetzt ist:

not in sorted order

während ich wünsche das Ergebnis in der folgenden Art und Weise haben:

sorted

ich das folgende Stück Code geschrieben haben Sortieren.

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

warum nicht einfach alle Eigenschaften in ein Objekt und verwenden Sie einen benutzerdefinierten Komparator zum Sortieren? – Krease

Antwort

0

Verwenden Sie einfach diesen anstelle Ihres gesamten Codes.

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 hat meine Antwort Ihnen geholfen? – Marat

+0

nein es immer noch stürzt – lisa

+0

@lise konnten Sie die Fehler im Protokoll hochladen? – Marat

1

Machen Sie eine Modellklasse wie ...

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

und Arraylist mit Result wie

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

Add erforderlichen Daten machen, und nachdem Sie es von bestimmten Code sortieren.

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

qNo ist ein String-Typ. – lisa

+0

@lisa Ich habe meine Antwort aktualisiert.das wird dir helfen :) – RBK

+0

Ich bekomme es in unsortierter Reihenfolge :( – lisa

Verwandte Themen