如果我想通过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);
答案 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
(即任何具体的子类型,例如List
,Set
)你试图将数组元素作为第一个参数。它应该是
Collections.sort(csvInputHandlers, comparator)
答案 3 :(得分:0)
收藏:
集合层次结构中的根接口。集合表示一组对象,称为其元素。有些集合允许重复元素而其他集合则不允许。 部分订购,其他订单无序
来源http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html