2017-01-05 5 views
2

私は、優先度(String)という変数があるモデルクラスのリストを持っています。リストの各項目は共通優先度3(HIGH、LOW、MEDIUM) 。私の質問は、その項目の優先順位(文字列)を使用してリストを並べ替えることです。例えば。 HIGH優先順位はすべて先頭に、MEDIUMは中間に、LOWは最後に移動する必要があります。前もって感謝します。priority(String)を使用してカスタムリストを並べ替える方法

public class Main extends Activity { 
    private ArrayList<Model> listOfModel = new ArrayList<>(); 

    private void setData(){ 
     listOfModel.addAll(getDataFromServer()); 
     Collections.sort(listOfModel); //sort using priority 
    } 
} 

public class Model { 
    private String name; 
    private String score; 
    private String priority;//HIGH,MEDIUM,LOW 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getScore() { 
     return score; 
    } 

    public void setScore(String score) { 
     this.score = score; 
    } 

    public String getPriority() { 
     return priority; 
    } 

    public void setPriority(String priority) { 
     this.priority = priority; 
    } 
} 
+0

https://www.tutorialspoint.com/java/java_using_comparator.htmあなたはコンパレータについて読む必要がありますが正常に動作しています。 – Rjiuk

答えて

1

Collections.sort(listOfModel, new Comparator<Model>() { 
    @Override 
    public int compare(Model m1, Model m2) { 
     String p1 = m1.getPriority(); 
     String p2 = m2.getPriority(); 
     if(p1 == null) return 1; 
     if(p2 == null) return -1; 
     if(p1.equals(p2)) return 0; 
     if(p1.equals("LOW") && (p2.equals("MEDIUM") || p2.equals("HIGH"))) 
      return -1; 
     if(p1.equals("MEDIUM") && p2.equals("HIGH")) 
      return -1; 
     return 1; 
    } 
}); 
+0

3つの優先事項があります。詳細を教えてください。 –

+0

@SaiKiranが更新されました。今すぐやってみて下さい? – GurV

+0

null優先度を処理するにはどうすればいいですか? –

0

あなたはカスタムオブジェクト

Collections.sort(listOfModel, new Comparator<Model>(){ 
    public int compare(Model m1, Model m2) { 
     return m1.getPriority().compareToIgnoreCase(m2.getPriority()); 
    } 
}); 
をソートするために以下のコードを使用することができるためには、HIGH優先順位すなわちLOW、MEDIUMの昇順にソートするカスタムコンパレータを作成します。
+0

@SaiKiranは、優先度のために文字列の代わりにintを使用できますか? 私はHIGH = 1、MEDIUM = 2、LOW = 3を意味します。はいの場合は、この例を試すことができます。 –

0

試用:

item = "priority"; 
mSortAttributes(item, listOfModel); 

public void mSortAttributes(final String item, ArrayList<Model> sortList){ 
     Collections.sort(sortList, new Comparator<Model>() { 
      @Override 
      public int compare(Model lhs, Model rhs) { 
       int retVal = 0; 
       //Ascending Order 
       if (item.equals("name")) { 
        retVal = lhs.name.compareToIgnoreCase(rhs.name); 
       } else if (item.equals(" score")) { 
        retVal = lhs.score.compareToIgnoreCase(rhs.score); 
       } else if (item.equals("priority")) { 
        retVal = lhs.priority.compareToIgnoreCase(rhs.priority); 
       } 
       return retVal; 
      } 
     }); 
    } 
0

使用このCode.thisは

static class myComparater implements Comparator<Model> { 

     @Override 
     public int compare(Model o1, Model o2) { 
      String p1 = o1.getPriority(); 
      String p2 = o2.getPriority(); 
      if (p1.equals(p2)) { 
       return 0; 
      } 
      if (p1.equals("HIGH") && (p2.equals("MEDIUM") || p2.equals("LOW"))) { 
       return -1; 
      } 
      if (p1.equals("MEDIUM") && p2.equals("LOW")) { 
       return -1; 
      } 
      return 1; 
     } 
    } 
関連する問題