在Java中按属性对Collection对象进行排序

时间:2015-01-21 21:26:50

标签: java list sorting arraylist collections

如果我想通过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); 

4 个答案:

答案 0 :(得分:1)

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

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

Collections.sort(myList, comparator);

答案 1 :(得分:0)

删除.toArray(),因为该排序方法只接受List类型而不是Array

Collections.sort(csvInputHandlers, comparator); 

默认值

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

答案 2 :(得分:0)

Collections#sort方法作用于Collections,因此第一个方法参数必须是Collection(即任何具体的子类型,例如ListSet)你试图将数组元素作为第一个参数。它应该是

Collections.sort(csvInputHandlers, comparator)

答案 3 :(得分:0)

收藏:

  

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

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