我有一个名为'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;
}}
答案 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版本。我相信这会提供更高质量的问题和答案。