【问题标题】:How to sort objects that are inside an Arraylist on the basis of their properties?如何根据属性对 Arraylist 中的对象进行排序?
【发布时间】:2017-03-19 07:25:22
【问题描述】:

我有一个名为“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;
    }}

【问题讨论】:

  • 您在addToList() 的3 个if 语句中做完全相同的事情,那么if 语句的意义何在?
  • 根本不要使用 Arraylist。使用 PriorityQueue,这样您的对象在添加时始终保持排序
  • @Guy:不,这个问题是问我们如何做一些上面的代码甚至没有尝试做的事情。但是带有字符串的==肯定是代码中的a问题...

标签: java arrays object


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这是一个使用比较器的简短演示。 将其视为一个非常简化的演示,而不是强大的生产代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2011-03-21
      • 2022-01-11
      • 2023-02-03
      相关资源
      最近更新 更多