2017-03-19 11 views
-3

私は 'sortList'と呼ばれるこのArrayListを持っています。私はそれにオブジェクトを追加しています。オブジェクトは 'MailItem'タイプです。オブジェクトの(項目の)getPriorityLevel()に従ってArrayListをソートしたい。どうやってやるの?Arraylist内のオブジェクトをプロパティに基づいて並べ替えるにはどうすればいいですか?

追加情報:getPriorityLevel()は文字列を返します。

これは私が今までやったです:Javaで

package strategies; 

import java.util.ArrayList; 

import automail.IMailSorter; 
import automail.MailItem; 
import automail.StorageTube; 

public class MailSorter implements IMailSorter{ 

    MailItem item; 

    private ArrayList<MailItem> sortList =new ArrayList<MailItem>(); 

    public void addToList(MailItem item) 
    { 
     if (item.getPriorityLevel()=="High") 
     { 

      MailItem highPriorityItem= new MailItem(item.getDestFloor(), item.getSize(), item.getPriorityLevel(), item.getArrivalTime()); 

      sortList.add(highPriorityItem); 

     } 

     if (item.getPriorityLevel()=="Medium") 
     { 

      MailItem mediumPriorityItem=new MailItem(item.getDestFloor(), item.getSize(), item.getPriorityLevel(), item.getArrivalTime()); 

      sortList.add(mediumPriorityItem); 
     } 

     if (item.getPriorityLevel()=="Low") 
     { 
      MailItem lowPriorityItem=new MailItem(item.getDestFloor(), item.getSize(), item.getPriorityLevel(), item.getArrivalTime()); 

      sortList.add(lowPriorityItem); 
     } 


    } 

    @Override 
    public boolean fillStorageTube(StorageTube tube) { 
     // TODO Auto-generated method stub 
     return false; 
    }} 
+3

[Javaで文字列を比較するにはどうすればいいですか?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Guy

+0

*「どうすればいいですか?つまり、オブジェクトの(アイテムの)getPriorityLevel()に従って、ArrayListをソートしますか? "*カスタム' Comparator'を使って 'sort()'を呼び出すことによって、 – Andreas

+3

あなたは 'addToList()'の3つの 'if'ステートメントで*まったく同じことをしていますので、' if'ステートメントのポイントは何ですか? – Andreas

答えて

0

comperatorの使用の短いデモです。 非常に単純化されたデモとしてそれを扱い、ない堅牢な製品コード:

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 

public class MailSorter{ 

    MailItem item; 

    private ArrayList<MailItem> sortList =new ArrayList<>(); 

    void addToList(MailItem item) { sortList.add(item);} 

    ArrayList<MailItem> getSortedList(){ 
     Collections.sort(sortList, new MailComperator()); 
     return sortList; 
    } 

    public class MailComperator implements Comparator<MailItem> { 

     @Override 
     public int compare(MailItem o1, MailItem o2) { 
      return o1.getPriorityLevel().compareTo(o2.getPriorityLevel()); 
     } 
    } 

    public static void main(String args[]) { 

     MailSorter ms = new MailSorter(); 

     ms.addToList(new MailItem("Low")); 
     ms.addToList(new MailItem("Medium")); 
     ms.addToList(new MailItem("Low")); 
     ms.addToList(new MailItem("High")); 
     ms.addToList(new MailItem("Medium")); 
     ms.addToList(new MailItem("Low")); 
     ms.addToList(new MailItem("High")); 

     ms.getSortedList().stream().forEach(e -> System.out.println(e.getPriorityLevel())); 
    } 
} 

class MailItem { 

    private String priorityLevel; 

    MailItem(String priorityLevel){ 
     this.priorityLevel = priorityLevel; //you may want to check ! null 
    } 

    String getPriorityLevel() { return priorityLevel;} 
} 

注コードが掲載コードのMCVEバージョンです。私はこれが高品質の質疑応答に貢献していると信じています。

関連する問題