【问题标题】:Sort Collection object by property in Java在 Java 中按属性对 Collection 对象进行排序
【发布时间】:2015-01-21 21:26:49
【问题描述】:

如果我想通过 CSVInputHandler 类上名为 Order 的属性对下面的 Collection 进行排序,我该怎么做?我尝试了最底层的那个,但没有运气。错误为The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (Collection<CSVInputHandler>, Comparator<CSVInputHandler>)。

对象

Collection<CSVInputHandler> csvInputHandlers = new ArrayList<>(csvInputHandlerMap.values());

试过

  Comparator<CSVInputHandler> comparator = new Comparator<CSVInputHandler>() {
                    public int compare(CSVInputHandler c1, CSVInputHandler c2) {
                        return c1.Order < c2.Order;
                    }
                };

                Collections.sort(csvInputHandlers, comparator); 

【问题讨论】:

  • Order的类型是什么?您从您的 compare() 方法返回 0,这是毫无意义的
  • Collections.sort 需要 List 而不是数组。我建议您阅读文档并阅读您遇到的编译错误。
  • 我只是使用 0 作为测试来消除语法错误。
  • 我知道,但是你如何排序一个集合。

标签: java list sorting arraylist collections


【解决方案1】:

为了对集合进行排序(使用Collections.sort),您必须将其显式转换为列表

List<CSVInputHandler> myList = new ArrayList<>(csvInputHandlers);

Collections.sort(myList, comparator);

【讨论】:

  • 感谢您实际回答问题
  • 没用,需要把列表的引用存到某个地方。否则它是一个空操作。
  • @user2336315 good catch...取出引用并修复参数类型
【解决方案2】:

删除 .toArray() 因为该排序方法只接受列表类型而不接受数组

Collections.sort(csvInputHandlers, comparator); 

定义

public static <T> void sort(List<T> list, Comparator<? super T> c) {

【讨论】:

  • 但是类型是集合而不是列表:/
【解决方案3】:

当您尝试将数组元素作为数组元素作为第一个论点。应该是

Collections.sort(csvInputHandlers, comparator)

【讨论】:

    【解决方案4】:

    收藏:

    集合层次结构中的根接口。集合表示一组对象,称为其元素。一些集合允许重复元素,而另一些则不允许。 有些是有序的,有些是无序的

    来源http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html

    【讨论】:

      猜你喜欢
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2013-02-12
      • 2023-04-03
      • 2020-01-12
      • 2011-03-21
      • 2017-08-12
      相关资源
      最近更新 更多