【问题标题】:Java - sorting using Collections.sort()Java - 使用 Collections.sort() 进行排序
【发布时间】:2012-07-15 10:21:25
【问题描述】:

我必须编写一个方法来对整数和双精度数进行排序。

public ArrayList<Number> sortDescending(ArrayList<Number> al){
    Comparator<Number> c=Collections.reverseOrder();
    Collections.sort(al,c);
    return al;
}

public ArrayList<Number> sortAscending(ArrayList<Number> al){
    Collections.sort(al);
    return al;
}

问题是在sortAscending中,出现如下错误:

绑定不匹配:Collections 类型的泛型方法 sort(List) 不适用于参数 (ArrayList)。推断的类型 Number 不是有界参数 >

【问题讨论】:

    标签: java sorting collections integer double


    【解决方案1】:

    您需要使用NumberComparable&lt;T&gt; 相交的通用上限

    public <T extends Number & Comparable<T>> ArrayList<T> sortDescending(ArrayList<T> al){
        Comparator<T> c=Collections.reverseOrder();
        Collections.sort(al,c);
        return al;
    }
    
    public <T extends Number & Comparable<T>> ArrayList<T> sortAscending(ArrayList<T> al){
        Collections.sort(al);
        return al;
    }
    

    所有 JDK Numbers(例如 FloatInteger 等)都匹配此类型。

    对于初学者来说,&lt;T extends A &amp; B&gt; 语法是您将T 绑定到AB 的方式。

    仅供参考,“或”逻辑没有语法(如果您考虑一下,也没有意义)

    【讨论】:

    • 仅供参考:没有理由在您的任何一种方法上都有返回类型,因为 List 已就地排序。
    • @Matt 不是“没有理由”,而是有几个返回类型的原因:A)为了说明键入方法的含义,B)这就是 OP 所拥有的和 C)从"non-getter" 方法在实现 fluent API pattern 时完成
    【解决方案2】:

    您收到错误是因为 number 未实现 Comparable&lt;Number&gt;。您需要添加一个通用约束,以便它扩展 number 和 Comparable。在这种情况下:

    public <T extends Number & Comparable<T>> ArrayList<T> sortAscending(ArrayList<T> al){
        Collections.sort(al);
        return al;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-05
      • 2012-07-07
      • 2018-05-13
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      相关资源
      最近更新 更多