Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对Java集合排序_Java_Sorting_Collections - Fatal编程技术网

对Java集合排序

对Java集合排序,java,sorting,collections,Java,Sorting,Collections,我有一个Java集合: Collection<CustomObject> list = new ArrayList<CustomObject>(); Collection list=new ArrayList(); CustomObject现在在显示列表之前有一个id字段。我想按该id对该集合进行排序 我有没有办法做到这一点 就是这样 另请参见 和比较器。比较器应尊重id字段。使用 你只需要这样做: 列表中的所有元素都必须实现可比较的接口 (或者使用下面的版本,其

我有一个Java集合:

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);