java - 编写一个通用方法来对一组任意类型的可比较对象进行排序

标签 java generics collections

我有这样的东西:

public class A implements Comparable<A> {
  ...
  @Override
  public int compareTo(A obj) {
     ...
  }
}

public class B implements Comparable<B> {
  ...
  @Override
  public int compareTo(B obj) {
     ...
  }
}

我还有一堆 HashSet 集合,它们在程序过程中慢慢填充,例如:

private Collection<A> col = new HashSet<A>();

在程序的最后,我想将它们转换为排序列表,以便它们可以排序显示:

public class Utils {
  public static <T> Collection<Comparable<T>> toSortedList(Collection<Comparable<T>> col) {
    List<Comparable<T>> sorted = new ArrayList<Comparable<T>>(col);
    Collections.sort(sorted);
    return sorted;
  }
}

不幸的是我得到了编译错误:

The method sort(List<T>) in the type Collections is not applicable for the arguments (List<Comparable<T>>)

如何修改上述内容,以便 Comparable 和 Comparable 的 HashSet 都可以传递给此方法?谢谢!

最佳答案

使用<T extends Comparable<? super T>>通用语法:

public class Utils {
    public static <T extends Comparable<? super T>> Collection<T> toSortedList(Collection<T> col) {
        List<T> sorted = new ArrayList<T>(col);
        Collections.sort(sorted);
        return sorted;
    }
}

相关文章:

java - 字符串的值

java - 如何在卸载应用程序时删除应用程序安装的受信任 CA 证书

java - 返回接口(interface)集合

java - 在不指定父类的泛型类型的情况下继承时出现不兼容类型错误

scala - 查找 Seq 中满足条件 X 的第一个元素

javascript - LoDash - DeepFlatten 对象数组

java - 在eclipse中运行web项目时出错

java - 如何确保 Neo4j 节点在同一事务内添加到索引中?

generics - C# 添加两个泛型值

java - 如何在java中的任何二维数组中存储不同数据类型的多个字段?