使用 Eclipse Collections 库,我如何根据值对 MutableMap 进行排序?
Using the Eclipse Collections library, how do I sort MutableMap on the value?
假设我有 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>
结束,但是 ordered/sorted 因此第一个元素是 ("One", 1),第二个元素("Two", 2), 第三个元素("Three", 3).
目前在 Eclipse 集合中没有直接的 API 可以根据其值对 Map
进行排序。
另一种方法是使用 flipUniqueValues
.
将地图翻转为 MutableSortedMap
MutableSortedMap<Integer, String> sortedMap = SortedMaps.mutable.empty();
sortedMap.putAll(mutableMap.flipUniqueValues());
System.out.println(sortedMap);
这将为您提供按 Integer
键排序的 MutableSortedMap
。这里的输出将是:{1=One, 2=Two, 3=Three}
您也可以先将 Pairs
存储在 List
中,然后使用 String
键对它们进行唯一分组以创建 MutableMap
。如果 Map
中的值是 Pair
实例,它们可用于使用直接 [=46= 创建排序的 List
、SortedSet
或 SortedBag
]s.
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 的提交者。
假设我有 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>
结束,但是 ordered/sorted 因此第一个元素是 ("One", 1),第二个元素("Two", 2), 第三个元素("Three", 3).
目前在 Eclipse 集合中没有直接的 API 可以根据其值对 Map
进行排序。
另一种方法是使用 flipUniqueValues
.
MutableSortedMap
MutableSortedMap<Integer, String> sortedMap = SortedMaps.mutable.empty();
sortedMap.putAll(mutableMap.flipUniqueValues());
System.out.println(sortedMap);
这将为您提供按 Integer
键排序的 MutableSortedMap
。这里的输出将是:{1=One, 2=Two, 3=Three}
您也可以先将 Pairs
存储在 List
中,然后使用 String
键对它们进行唯一分组以创建 MutableMap
。如果 Map
中的值是 Pair
实例,它们可用于使用直接 [=46= 创建排序的 List
、SortedSet
或 SortedBag
]s.
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 的提交者。