叮當(dāng)貓咪
2023-12-30 15:59:35
我有一個SortedSet<MyObject>并且MyObject有一些compareTo邏輯Date。class MyObject { .. many fields private Date date; @Override public int compareTo(MyObject object) { .. logic here.. } }我想將其轉(zhuǎn)換SortedSet為 aTreeMap或 Guava 的ImmutableSortedMap鍵作為 中元素的位置SortedSet。例如0 -> MyObject11 -> MyObject2...and so on我可以迭代并手動SortedSet將元素放入新元素中TreeMap,但我想知道是否有更干凈的方法可以通過 Streams 或 Guava 庫/Collection 庫來完成。
3 回答

月關(guān)寶盒
TA貢獻1772條經(jīng)驗 獲得超5個贊
只要用循環(huán)來做就可以了。
TreeMap<Integer, MyClass> map = new TreeMap<>();
for (MyClass myClass : sortedSet) {
? map.put(map.size(), myClass);
}

POPMUISE
TA貢獻1765條經(jīng)驗 獲得超5個贊
使用流外部的有效最終計數(shù)器變量。
由于插入是按順序進行的,因此您不需要最終的映射是TreeMap; 它可以更快LinkedHashMap,其迭代順序與插入相同。
AtomicInteger counter = new AtomicInteger();
Map<Integer, MyClass> map = sortedSet.stream()
.collect(Collectors.toMap(
x -> counter.getAndIncrement(),
x -> x,
(a, b) -> a,
LinkedHashMap::new));
如果您迫切需要一個TreeMap,請在上面的代碼中替換LinkedHashMap為。TreeMap

慕神8447489
TA貢獻1780條經(jīng)驗 獲得超1個贊
您的 TreeMap 想法不正是數(shù)組嗎?
MyObject[] myObjects = sortedMap.toArray();
添加回答
舉報
0/150
提交
取消