假设我有MutableMap<String, Integer>
,并且想对Integer
值进行排序。
使用此库的推荐方法是什么? Eclipse Collections库是否有实用程序或方法或推荐的方法来解决此问题?
例如,假设:
MutableMap<String, Integer> mutableMap = Maps.mutable.empty();
mutableMap.add(Tuples.pair("Three", 3));
mutableMap.add(Tuples.pair("One", 1));
mutableMap.add(Tuples.pair("Two", 2));
最后,我想用一个MutableMap<String, Integer>
包含相同的元素,但是将其排序/排序,以便第一个元素是(“ One”,1),第二个元素(“ Two”,2 )和第三个元素(“ Three”,3)。
答案 0 :(得分:2)
Eclipse集合中目前没有直接的API可根据其值对Map
进行排序。
一种选择是使用flipUniqueValues
将地图翻转成MutableSortedMap
。
MutableSortedMap<Integer, String> sortedMap = SortedMaps.mutable.empty();
sortedMap.putAll(mutableMap.flipUniqueValues());
System.out.println(sortedMap);
这将为您提供按MutableSortedMap
键排序的Integer
。输出为:{1=One, 2=Two, 3=Three}
您还可以先将Pairs
存储在List
中,然后使用String
键将它们唯一地分组以创建MutableMap
。如果Map
中的值是Pair
实例,则可以使用它们通过直接API创建排序后的List
,SortedSet
或SortedBag
。>
MutableList<Pair<String, Integer>> list = Lists.mutable.with(
Tuples.pair("Three", 3),
Tuples.pair("One", 1),
Tuples.pair("Two", 2)
);
MutableMap<String, Pair<String, Integer>> map =
list.groupByUniqueKey(Pair::getOne);
System.out.println(map);
MutableList<Pair<String, Integer>> sortedList =
map.toSortedListBy(Pair::getTwo);
MutableSortedSet<Pair<String, Integer>> sortedSet =
map.toSortedSetBy(Pair::getTwo);
MutableSortedBag<Pair<String, Integer>> sortedBag =
map.toSortedBagBy(Pair::getTwo);
System.out.println(sortedList);
System.out.println(sortedSet);
System.out.println(sortedBag);
输出:
{One=One:1, Three=Three:3, Two=Two:2}
[One:1, Two:2, Three:3]
[One:1, Two:2, Three:3]
[One:1, Two:2, Three:3]
以上所有toSorted
方法仅对值进行操作。这就是为什么我将值存储为Pair
实例的原因。
注意:我是Eclipse Collections的提交者。