Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据属性对Arraylist中的对象进行排序?_Java_Arrays_Object - Fatal编程技术网

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

Java 如何根据属性对Arraylist中的对象进行排序?,java,arrays,object,Java,Arrays,Object,我有一个叫做“sortList”的ArrayList。我正在给它添加对象。对象的类型为“MailItem”。我想根据对象项的getPriorityLevel对ArrayList进行排序。我该怎么做 附加信息:getPriorityLevel返回一个字符串 这就是我到目前为止所做的: package strategies; import java.util.ArrayList; import automail.IMailSorter; import automail.MailItem; imp

我有一个叫做“sortList”的ArrayList。我正在给它添加对象。对象的类型为“MailItem”。我想根据对象项的getPriorityLevel对ArrayList进行排序。我该怎么做

附加信息:getPriorityLevel返回一个字符串

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

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

检查java中的比较器接口。它提供了基于不同属性进行排序的方法。对于要排序的属性,可以使用比较器


下面是一个使用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;}
}

注意:该代码是已发布代码的一个版本。我认为这有助于提供更高质量的问题和答案

在addToList中的3个if语句中,您正在做完全相同的事情,那么if语句的意义是什么呢?根本不要使用Arraylist。使用PriorityQueue,使对象始终保持排序状态add@Guy:不,这个问题是问我们如何做上面的代码甚至没有尝试做的事情。但是带字符串的==肯定是代码中的一个问题…的可能重复