我正在使用来自Apache集合库的TreeBidiMap。我想对double类型的值进行排序。

我的方法是检索值的集合使用:

Collection coll = themap.values();

这很正常。

主要问题:我现在想知道我如何转换/cast(不确定哪个是正确的)coll成一个列表,这样它就可以排序?

然后,我打算遍历排序的List对象,它应该是有序的,并使用themap. getkey (iterator.next())从TreeBidiMap (themap)中获得适当的键,其中迭代器将在double列表上。


当前回答

我认为Paul Tomblin的答案在coll已经是一个列表的情况下可能是浪费的,因为它将创建一个新的列表并复制所有元素。如果coll包含很多元素,这可能需要很长时间。

我的建议是:

List list;
if (coll instanceof List)
  list = (List)coll;
else
  list = new ArrayList(coll);
Collections.sort(list);

其他回答

使用流:

someCollection.stream().collect(Collectors.toList())

我相信你可以这样写:

coll.stream().collect(Collectors.toList())
Collections.sort( new ArrayList( coll ) );

类似这样的方法应该可以工作,调用ArrayList构造函数来接受一个Collection:

List theList = new ArrayList(coll);

Java 10引入了List#copyOf,返回不可修改的List,同时保留顺序:

List<Integer> list = List.copyOf(coll);