java - 有没有一种简单的方法可以以这种方式对数组列表进行排序?

标签 java sorting collections arraylist

我想知道是否有一种方法可以对自定义对象的 Arraylist 进行排序以适应下面解释的情况?我假设我必须编写一个自定义比较器。

假设我有一个如下所示的对象类:

public class Person {
    private String status;    //options: Online, Away, Offline
    private String name;      //Person's name
    private Date date;        //Last signed on

    //basic constructor
    public Person() {
        //set default values
    }

    //constructor to set all variables
    public Person(String s, String n, Date d) {
        status = s;
        name = n;
        date = d;
    }

    //setters & getters for each of the fields
}

根据姓名和日期排序应该相当容易。但是,我想知道如何根据状态进行排序?我希望能够根据此人当前是否在线 以及谁离线 对我的数组进行排序。我不太关心谁不在。

上面的类只是一个示例类。我的实际类(class)有一个 JLabel,它根据状态设置了一个图标。 setText() 保持未使用状态。我想到了将标签设置为值 0、1 和 2 并仅使用典型的整数比较器的可能性,但我不确定这是否是一种建议的做法。

当然,我在这里缺少一个明显的解决方案,所以也许评论或链接可以提供必要的信息。我知道这里有大量的“排序数组列表”线程,我浏览了很多。他们中的大多数只是按字母顺序对字符串或整数进行排序。

最佳答案

如果我理解正确的话,你基本上想要对 2 个字段进行排序 - 主要字段是状态(因此具有相同状态的人聚集在一起)然后,在每个具有相同状态的人组中,按名称排序。

执行此操作的比较器如下所示:

 public class CompositePersonComparator implements Comparator<Person> {    
    @Override
    public int compare(Person a, Person b) {
       //1st and foremost - see if they are not of the same status.
       int statusComparison = a.getStatus().compareTo(b.getStatus());
       if (statusComparison!=0) return statusComparison;
       //logical else - same status, sort by name
       return a.getName().compareTo(b.getName());
    }
 }

关于java - 有没有一种简单的方法可以以这种方式对数组列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508884/

相关文章:

java - java中排序哪个字符串更大,数组

java - 如何在分布式系统中以相同的方式随机化两个字符串集合?

java - 创建一个可观察的列表/集合

java - 给定两个数组列表,如何计算有效组合数?

java - git log --follow 包括错误的提交

java - Java中的runLater block 之间是否存在并发?

java - 对列表进行排序取决于另一个排序列表,该列表具有一个共同的排序属性

java - 给定一个整数数组 [x0 x1 x2],你如何计算从 [0 0 0] 到 [x0 x1 x2] 的所有可能排列?

.net - 过滤 .Net 中包含(几乎)重复项的列表的最有效方法

python - 排序()返回无