我有一个Java集合:
Collection<CustomObject> list = new ArrayList<CustomObject>();
现在,在显示列表之前,CustomObject
有一个id
字段,我想按该id
对此集合进行排序。
我有没有办法这样做呢?
发布于 2011-08-05 22:15:57
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。
发布于 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;
}
});
发布于 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());
https://stackoverflow.com/questions/6957631
复制相似问题