使用Eclipse Collections库,如何对值进行MutableMap排序?

时间:2018-09-21 14:39:17

标签: 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>包含相同的元素,但是将其排序/排序,以便第一个元素是(“ One”,1),第二个元素(“ Two”,2 )和第三个元素(“ Three”,3)。

1 个答案:

答案 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创建排序后的ListSortedSetSortedBag

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的提交者。