对Java集合排序
我有一个Java集合:对Java集合排序,java,sorting,collections,Java,Sorting,Collections,我有一个Java集合: Collection<CustomObject> list = new ArrayList<CustomObject>(); Collection list=new ArrayList(); CustomObject现在在显示列表之前有一个id字段。我想按该id对该集合进行排序 我有没有办法做到这一点 就是这样 另请参见 和比较器。比较器应尊重id字段。使用 你只需要这样做: 列表中的所有元素都必须实现可比较的接口 (或者使用下面的版本,其
Collection<CustomObject> list = new ArrayList<CustomObject>();
Collection list=new ArrayList();
CustomObject
现在在显示列表之前有一个id
字段。我想按该id
对该集合进行排序
我有没有办法做到这一点 就是这样
另请参见
-
和比较器。比较器应尊重id字段。使用
你只需要这样做:
列表中的所有元素都必须实现可比较的接口
(或者使用下面的版本,其他人已经说过。)在customObject上实现该接口 您应该实现
比较器
接口
例如:
public class CustomComparator implements Comparator<CustomObject>
{
@Override
public int compare(CustomObject o1, CustomObject o2) {
return o1.getId().compareTo(o2.getId());
}
}
使用:
简单得多
List<CustomObject> list = getCustomObjectList();
list.sort((left, right) -> left.getId() - right.getId());
System.out.println(list);
List List=getCustomObjectList();
list.sort((左,右)->left.getId()-right.getId());
系统输出打印项次(列表);
简单的
List<CustomObject> list = getCustomObjectList();
list.sort(Comparator.comparing(CustomObject::getId));
System.out.println(list);
List List=getCustomObjectList();
排序(Comparator.comparing(CustomObject::getId));
系统输出打印项次(列表);
显然,初始代码也可以用于JDK 8。一个稍有不同的示例说明,如果您有一个类没有实现Comparable,但仍然希望在字段或方法上对其进行排序
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;
}
});
Collections.sort(allMatching,newcomparator(){
@覆盖公共整数比较(最终一级o1,最终一级o2){
如果(o1.getMethodToSort()>o2.getMethodToSort()){
返回1;
}else if(o1.getMethodToSort()
从Java 8开始,您现在可以使用lambda对流执行此操作:
list.stream().sorted(Comparator.comparing(customObject::getId))
.foreach(object -> System.out.println(object));
问题是:“分类收集”。因此,您不能使用
Collections.sort(列表l,Comparator)在Java 8中,您有几个选项,将方法引用和内置的comparating
Comparator组合在一起:
import static java.util.Comparator.comparing;
Collection<CustomObject> list = new ArrayList<CustomObject>();
Collections.sort(list, comparing(CustomObject::getId));
//or
list.sort(comparing(CustomObject::getId));
导入静态java.util.Comparator.Comparating;
集合列表=新的ArrayList();
排序(列表,比较(CustomObject::getId));
//或
排序(比较(CustomObject::getId));
您还可以使用:
Collections.sort(list, new Comparator<CustomObject>() {
public int compare(CustomObject obj1, CustomObject obj2) {
return obj1.id - obj2.id;
}
});
System.out.println(list);
Collections.sort(列表,新比较器(){
公共整数比较(CustomObject obj1、CustomObject obj2){
返回obj1.id-obj2.id;
}
});
系统输出打印项次(列表);
有很多正确答案,但我还没有找到这一个:
集合无法排序,只能对其进行迭代
现在,您可以对它们进行迭代并创建一个新的排序对象。您可以使用java自定义类进行排序。为了超级清晰,Collection.sort(list,comparator)不会返回类似以下内容的内容list=Collection.sort(list,comparator);
将抛出一个错误(void不能转换为[list type]),应改为Collection.sort(list,comparator)
如果他们想不止一次排序怎么办?编辑答案,请检查。如果可以理解如何使用比较器,这显然不是什么大问题。如果你能做一次,也可以做n次:)是的。。。如果类实现comparable,则不需要传递comparator…nice..t方法sort(List,comparator)排序方法适用于列表,而不是集合。列表变量的类型应更改为List,以便本例能够工作。您实现的if语句完全执行compareTo()的操作
已经有了。区别在于,在这个示例中,类ClassOne不是可比较的类,它没有实现可比较。我只是想展示一个示例,说明如何使用集合和比较器对不可比较的对象进行排序。ClassOne没有compareTo方法..不适用于java 6(Collections.sort仅限于列表)在Java 7或8中找不到集合。排序采用集合。根据定义,列表是元素的有序序列,而集合是无序的元素的不同列表。如果要在集合中排序,请查看TreeSet@Qwerky-我知道他有一个列表。我建议他使用一个集合。除非他想保留副本和插入呃。我4年前问过这个问题,你现在正在回答。谢谢你的回答。真的很感激。4年了,仍然错误的答案被标记为正确答案。谁是坏人?@Makky,因为它回答的是一个列表,而不是一个集合可能重复的完全不相关的答案。
list.stream().sorted(Comparator.comparing(customObject::getId))
.foreach(object -> System.out.println(object));
Comparator<String> defaultComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
};
Collection<String> collection = getSomeStringCollection();
String[] strings = collection.toArray(new String[collection.size()]);
Arrays.sort(strings, defaultComparator);
List<String> sortedStrings = Arrays.asList(strings);
Collection<String> collection = getSomeStringCollection();
List<String> list = new ArrayList(collection);
Collections.sort(list, defaultComparator);
collection = list; // if you wish
List<String> list = getSomeStringList();
Collections.sort(list, defaultComparator);
Set<String> set = getSomeStringSet();
// Than steps like in 'For Collection type' section or use java.util.TreeSet
// TreeSet sample:
// Sorted using java.lang.Comparable.
Set<String> naturalSorted = new TreeSet(set);
Set<String> set = getSomeStringSet();
Set<String> sortedSet = new TreeSet(defaultComparator);
sortedSet.addAll(set);
List<String> list = getSomeStringList();
list.sort(defaultComparator);
List<String> list = getSomeStringList();
list.sort((String o1, String o2) -> o1.compareTo(o2));
List<String> list = getSomeStringList();
list.sort(String::compareTo);
import static java.util.Comparator.comparing;
Collection<CustomObject> list = new ArrayList<CustomObject>();
Collections.sort(list, comparing(CustomObject::getId));
//or
list.sort(comparing(CustomObject::getId));
Collections.sort(list, new Comparator<CustomObject>() {
public int compare(CustomObject obj1, CustomObject obj2) {
return obj1.id - obj2.id;
}
});
System.out.println(list);