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

我想知道是否有一种方法可以对自定义对象的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
}

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

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

当然,我这里缺少一个明显的解决方案,因此注释或链接可能会提供必要的信息。我知道SO上有很多“排序数组列表”线程,我已经浏览了很多。其中大多数只是按字母顺序或整数排序字符串。

参考方案

如果我理解正确,那么您基本上想对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 8具有任何匹配属性的对象的过滤器列表 - java

我的要求是通过匹配任何属性的字符串来过滤对象列表。例如,假设Contact类具有三个属性:街道,城市,电话。我知道java流过滤器是如何工作的,在这里我必须将输入字符串与每个属性进行比较,如下所示:contactList.stream().filter(contact -> contact.getStreet().equals("dubai&…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

Java-固定大小的列表与指定初始容量的列表之间的差异 - java

我在理解这一点上遇到了问题。当我们做 List<Integer> list = Arrays.asList(array); 我们不能在该列表上使用添加,删除之类的方法。我知道Arrays.asList()返回固定大小的列表。我不明白的是,如果我们创建一个具有指定初始容量的列表,例如List<Integer> list2 = new A…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…