使用 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= 创建排序的 ListSortedSetSortedBag ]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 的提交者。