Java 如何根据属性对Arraylist中的对象进行排序?
我有一个叫做“sortList”的ArrayList。我正在给它添加对象。对象的类型为“MailItem”。我想根据对象项的getPriorityLevel对ArrayList进行排序。我该怎么做 附加信息:getPriorityLevel返回一个字符串 这就是我到目前为止所做的: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
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:不,这个问题是问我们如何做上面的代码甚至没有尝试做的事情。但是带字符串的==肯定是代码中的一个问题…的可能重复