jon*_*ine 2 java priority-queue multiset guava
我有
Multiset<String> keys
Run Code Online (Sandbox Code Playgroud)
我希望拥有一个拥有200个最常用键的Multiset.我已经弄清楚如何获得按频率排序的ImmutableMultiset,但是我只是难以获得它的一部分.
我从其他stackOverFlow问题得到了排序方面
ImmutableMultiset<String> orderedMultiset = Multisets.copyHighestCountFirst(keys);
Run Code Online (Sandbox Code Playgroud)
对于子集方面,我尝试使用MinMaxPriorityQueue,以便我可以使用maximumSize(200).
MinMaxPriorityQueue<String> orderedSubset = MinMaxPriorityQueue.maximumSize(200).create(orderedMultiset);
Run Code Online (Sandbox Code Playgroud)
但它似乎只返回200个键的随机选择.检查orderedMultiset中的最高值甚至不会出现在返回的MinMaxPriorityQueue中.我也担心,即使它确实得到了它们,我也可能只得到几个不同的键,其中总计数为200.而且我最好还有200个不同的键,每个键的计数.
我问了一个人,他们提到了一些关于POJO和Comparable的事情,但我并没有按照他们的建议行事.由于POJO无法真正实现可比较的定义.我不太确定.
我也在使用番石榴订购,但我认为这不会起作用,因为函数将采用字符串并且不知道来自multiset的计数.
MinMaxPriorityQueue<String> strings = MinMaxPriorityQueue.orderedBy(topKCount).maximumSize(200).create(multisets);
private final Ordering<String> topKCount = Ordering.natural()
.onResultOf(new Function<String, String>() {
@Override
public String apply(String keys) {
//todo
}
});
Run Code Online (Sandbox Code Playgroud)
有谁知道我在这里做错了什么,或者至少指出了正确的方向.谢谢
如果您只想获得200个最常用的密钥,您可以这样做Multisets.copyHighestCountFirst(multiset).elementSet().asList().subList(0, 200).如果您愿意,可以使用它来填充另一个ImmutableMultiset元素及其原始多集中的相应计数.
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |