首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对Java集合进行排序

对Java集合进行排序
EN

Stack Overflow用户
提问于 2011-08-05 22:08:50
回答 11查看 184.6K关注 0票数 82

我有一个Java集合:

Collection<CustomObject> list = new ArrayList<CustomObject>();

现在,在显示列表之前,CustomObject有一个id字段,我想按该id对此集合进行排序。

我有没有办法这样做呢?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-08-05 22:15:57

使用Comparator

List<CustomObject> list = new ArrayList<CustomObject>();
Comparator<CustomObject> comparator = new Comparator<CustomObject>() {
    @Override
    public int compare(CustomObject left, CustomObject right) {
        return left.getId() - right.getId(); // use your logic
    }
};

Collections.sort(list, comparator); // use the comparator as much as u want
System.out.println(list);

此外,如果CustomObject实现了Comparable,那么只需使用Collections.sort(list)

在JDK 8中,语法要简单得多。

List<CustomObject> list = getCustomObjectList();
Collections.sort(list, (left, right) -> left.getId() - right.getId());
System.out.println(list);

简单得多

List<CustomObject> list = getCustomObjectList();
list.sort((left, right) -> left.getId() - right.getId());
System.out.println(list);

最简单

List<CustomObject> list = getCustomObjectList();
list.sort(Comparator.comparing(CustomObject::getId));
System.out.println(list);

显然,初始代码也可以用于JDK 8。

票数 164
EN

Stack Overflow用户

发布于 2011-08-05 22:28:45

一个稍有不同的例子,假设你有一个类没有实现比较,但你仍然想按字段或方法对它进行排序。

Collections.sort(allMatching, new Comparator<ClassOne>() {
  @Override public int compare(final ClassOne o1, final ClassOne o2) {
    if (o1.getMethodToSort() > o2.getMethodToSort()) {
      return 1;
    } else if (o1.getMethodToSort() < o2.getMethodToSort()) {
      return -1;
    }  
    return 0;
  }
});
票数 11
EN

Stack Overflow用户

发布于 2011-08-05 22:14:35

您应该实现Comparator接口。

示例:

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

然后,您可以使用集合类Collections.sort()方法:

Collections.sort(list, new CustomComparator());
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6957631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档