如何根据属性对Arraylist中的对象进行排序?

时间:2017-03-19 07:25:22

标签: java arrays object

我有一个名为'sortList'的ArrayList。我正在添加对象。对象的类型为“MailItem”。我想根据对象的(项目)getPriorityLevel()对我的ArrayList进行排序。我怎么能这样做?

其他信息:getPriorityLevel()返回一个String。

这就是我到目前为止所做的事情:

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;
    }}

2 个答案:

答案 0 :(得分:0)

检查java中的Comparator接口。它提供了基于不同属性进行排序的方法。您可以为要对其进行排序的属性设置比较器。

http://www.javatpoint.com/Comparator-interface-in-collection-framework

答案 1 :(得分: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版本。我相信这会提供更高质量的问题和答案。