我正在使用Apache Collections库中的 TreeBidiMap
. 我想对 doubles
的值进行排序 .
我的方法是使用以下方法检索 Collection
的值:
Collection coll = themap.values();
这自然很好 .
Main Question: 我现在想知道如何转换/转换(不确定哪个是正确的) coll
到 List
所以它可以排序?
然后我打算遍历排序的 List
对象,该对象应按顺序从 TreeBidiMap
( themap
)使用 themap.getKey(iterator.next())
获取相应的键,其中迭代器将在 doubles
列表上 .
8 回答
正如Erel Segal Halevi在下面所说,如果coll已经是一个列表,你可以跳过第一步 . 但这取决于TreeBidiMap的内部 .
像这样的东西应该工作,调用带有集合的ArrayList constructor:
我认为Paul Tomblin的答案可能是浪费,以防coll已经是一个列表,因为它将创建一个新列表并复制所有元素 . 如果coll包含许多元素,这可能需要很长时间 .
我的建议是:
我相信你可以这样写:
@Kunigami:我想你可能会误认为是Guava的
newArrayList
方法 . 它不检查Iterable是否是List类型,只是按原样返回给定的List . 它总是创建一个新列表:你要求的是一个非常省钱的操作,确保你不需要经常这样做(例如在一个循环中) .
否则,您可以创建自定义集合 . 我想出了一个你的
TreeBidiMap
和TreeMultiset
. 仅实施您需要的内容并关注数据完整性 .这样,您从
values()
返回 sortedMultiset
. 但是,如果你需要它作为一个列表(例如你需要类似于数组的get(index)
方法),你必须发明一些更复杂的东西 .这是一个单线程的次优解决方案: