按属性排序自定义对象的ArrayList [英] Sort ArrayList of custom Objects by property

查看:158
本文介绍了按属性排序自定义对象的ArrayList的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读了关于使用比较器排序ArrayLists,但在人们使用的所有例子中, compareTo 根据一些研究是Strings的一种方法。



我想通过其中一个属性来排序一个自定义对象的ArrayList:一个Date对象
getStartDay())。通常我会比较它们的 item1.getStartDate()。before(item2.getStartDate())所以我想知道是否可以写下如下:

  public class CustomComparator {
public boolean compare(Object object1,Object object2){
return object1.getStartDate()。before(object2 .getStartDate());
}
}

public class RandomName {
...
Collections.sort(Database.arrayList,new CustomComparator);
...
}


解决方案

日期 实施 可比较 ,它有一个 compareTo 方法,就像 String 一样。



所以你的自定义 比较器 可能如下所示:

  public class CustomComparator implements比较器< MyObject> {
@Override
public int compare(MyObject o1,MyObject o2){
return o1.getStartDate()。compareTo(o2.getStartDate());
}
}

compare() / code>方法必须返回一个 int ,所以你不能像你一样直接返回一个 boolean



你的排序代码就像你写的一样:

  Collections.sort(Database.arrayList,new CustomComparator()); 

如果您不需要重复使用比较器,则稍短一些的方法来编写所有这些,是将它写成一个内联匿名类:

  Collections.sort(Database.arrayList,new Comparator< MyObject>(){
@Override
public int compare(MyObject o1,MyObject o2){
return o1.getStartDate()。compareTo(o2.getStartDate());
}
} );






由于 java-8



现在,您可以使用 lambda表达式来编写较短格式的最后一个示例/ a>对于比较器

  Collections.sort(Database。 arrayList,
(o1,o2) - > o1.getStartDate()。compareTo(o2.getStartDate()));

列表有一个 sort(Comparator) 方法,所以你可以进一步缩短这一点:

  Database.arrayList.sort ((o1,o2) - > o1.getStartDate()。compareTo(o2.getStartDate())); 

这是一个常见的成语,有一个内置方法生成一个 可比较键的课程的比较器键:

  Database.arrayList.sort(Comparator.comparing(MyObject :: getStartDate)); 

所有这些都是等效的表格。


I read about sorting ArrayLists using a Comparator but in all of the examples people used compareTo which according to some research is a method for Strings.

I wanted to sort an ArrayList of custom objects by one of their properties: a Date object (getStartDay()). Normally I compare them by item1.getStartDate().before(item2.getStartDate()) so I was wondering whether I could write something like:

public class CustomComparator {
    public boolean compare(Object object1, Object object2) {
        return object1.getStartDate().before(object2.getStartDate());
    }
}

public class RandomName {
    ...
    Collections.sort(Database.arrayList, new CustomComparator);
    ...
}

解决方案

Since Date implements Comparable, it has a compareTo method just like String does.

So your custom Comparator could look like this:

public class CustomComparator implements Comparator<MyObject> {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return o1.getStartDate().compareTo(o2.getStartDate());
    }
}

The compare() method must return an int, so you couldn't directly return a boolean like you were planning to anyway.

Your sorting code would be just about like you wrote:

Collections.sort(Database.arrayList, new CustomComparator());

A slightly shorter way to write all this, if you don't need to reuse your comparator, is to write it as an inline anonymous class:

Collections.sort(Database.arrayList, new Comparator<MyObject>() {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return o1.getStartDate().compareTo(o2.getStartDate());
    }
});


Since

You can now write the last example in a shorter form by using a lambda expression for the Comparator:

Collections.sort(Database.arrayList, 
                        (o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));

And List has a sort(Comparator) method, so you can shorten this even further:

Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));

This is such a common idiom that there's a built-in method to generate a Comparator for a class with a Comparable key:

Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));

All of these are equivalent forms.

这篇关于按属性排序自定义对象的ArrayList的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆