如何按每个密钥的值计数对guava multimap进行排序



我已经看到了这个问题并在这里回答,但是我的用例正在创建过程中。

我可以创建这样的多图:

ImmutableListMultimap<Foo, Bar> indexMultiMap = Multimaps.index(barCollection, new Function<Bar, Foo>() {
     @Override
     public Foo apply(Bar bar) {
        //some works
        return Foo;
     }
  });

我知道foo元素将是唯一的,并且我想按照此地图中每个foo元素的每个bar collection的频率对此地图进行排序。

1)我该如何一次迭代?喜欢在将此集合索引到Multimap

时这样做

2)如果不是这样,那么获得它的有效方法是什么?

我的目标是,当我迭代这张地图时,我想看到第一个键具有更大的价值计数,例如

foo-> 3(与此键相对应的条尺寸)

foo-> 3

foo-> 2

foo-> 1

foo-> 1

来自 Multimaps.index()的javadoc;

"在返回的多件事中,键以最初遇到的顺序出现..."

如果以"模拟"隐式排序行为的方式对集合进行排序,则将按照所需的顺序创建多张图。例如:

SortedMultiset preSorted = TreeMultiset.create(fooComparator);

然后将Multimaps.index()送入上述预定收集。

如 @px5x2所说。当您调用Multimaps.index()时,按键以第一次遇到的顺序出现。因此,首先对您的收藏进行分类。在此处使用guava Multimaps.index()示例进行微小的修改。

ImmutableSet<String> digits = ImmutableSet.of("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine");
Function<String, Integer> lengthFunction = new Function<String, Integer>(){
    public Integer apply(String input) {
        return input.length();
    }
};
ImmutableMultimap<Integer, String> sortedOnLength = Multimaps.index(
    Ordering.natural().onResultOf(lengthFunction).sortedCopy(digits), 
    lengthFunction
);

最新更新