我已经看到了这个问题并在这里回答,但是我的用例正在创建过程中。
我可以创建这样的多图:
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
);