java中List集合排序
在java里面,有时候我们可能需要对list集合中的对象的某个属性进行排序。这个问题就很简单了,Collections这个工具类提供了排序的方法,有两个重载方法,一个是只接受一个List集合,另一个是接受一个list和一个 Comparator接口。我这里以第二种为例讲解,后面在简单说明一下第一种,注意默认的顺序是升序排列。
在java api中可以看到 Comparator接口里面就一个方法,int compare(T o1, T o2),传入两个对象,关于返回值,有三种情况-1, 0, 1。-1表示o1小于o2,0表示o1等于o2,1表示o1大于o2。如果我们想要的就是升序排列,那就比较o1的o2属性,保证o1小于o2属性返回-1,o1等于o2的属性返回0,o1大于o2的属性返回1就行了,结果出来的就是升序的结集合了。还有可能想降序,那还不简单,小于返回1,大于返回-1,等于还是返回0就解决了。我们只需要明白一点,那就是程序只能通过这个compare方法返回的值来确定顺序,-1时o1排在前面,1时o1排在后面,0就不用动,Collections这个排序方法永远都是根据返回值“升序排列”。说的直白一点就是:compare方法返回-1时,表示o1排在o2的前面,返回1是表示o1排在o2的后面,至于什么情况返回-1还是1就根据业务需求来确定。
下面看个例子:
package com.pzn.sort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class SortListTest { public static void main(String[] args) { List<Per> list = new ArrayList<>(); list.add(new Per("a", "2015-11-10")); list.add(new Per("b", "2015-10-10")); list.add(new Per("c", "2015-09-10")); list.add(new Per("d", "2015-11-02")); list.add(new Per("e", "2015-10-13")); // 升序 Collections.sort(list, new Comparator<Per>() { public int compare(Per o1, Per o2) { return o1.bir.compareTo(o2.bir); } }); System.out.println(list); // 降序 Collections.sort(list, new Comparator<Per>() { public int compare(Per o1, Per o2) { return -o1.bir.compareTo(o2.bir); } }); System.out.println(list); } } class Per { // 不要问我这里为什么不写private,然后提供setter/getter方法,而用public。 // 是因为我写测试代码的时候偷懒,这段注释也是写博客的时候加的。 public final String name; public final String bir; public Per(String name, String bir) { this.name = name; this.bir = bir; } @Override public String toString() { return "Per [name=" + name + ", bir=" + bir + "]"; } }
最后说说第一个排序方法,只需要传入list集合的那个方法,这个方法要求要排序的list集合中的对象所属的类要实现一个Comparable接口,可能也注意到了,上面代码中String的比较就是使用的一个
compareTo方法,这个方法就是来自Comparable接口,也就是说String实现了这个接口。
上一篇: H5的服务器推送事件详解