通过降低值来迭代GNU Trove TObjectIntHashMap的推荐方法是什么?

时间:2014-04-09 11:52:17

标签: java trove4j

GNU Trove / trove4j TObjectIntHashMap非常适合计算字符串出现次数:

TObjectIntHashMap<Integer> map = new TObjectIntHashMap<>();
map.adjustOrPutValue(string, 1, 1);

现在常见的任务是要求具有最高计数的字符串或通过减少计数来迭代。你会怎么做?

谢谢你, 烫发

2 个答案:

答案 0 :(得分:2)

TObjectIntHashMap中没有针对此的特殊操作。要获得具有最大值的条目,请遍历所有条目:

class GetMaxEntry implements TObjectIntProcedure {
    Object key;
    int value = Integer.MIN_VALUE;
    public boolean execute(Object k, int v) {
        if (v >= value) {
            key = k;
            value = v;
        }
        return true;
    }
}
GetMaxEntry getMaxEntry = new GetMaxEntry();
map.forEachEntry(getMaxEntry);
//process(getMaxEntry.key, getMaxEntry.value);

要通过减少计数进行迭代,您唯一能做的就是使用相同的{{1将条目转储到AbstractMap.SimpleImmutableEntry s(或具有原始值字段的特殊Entry类)的集合或数组中。然后按forEachEntryCollections.sort()对自定义Arrays.sort()进行排序。

答案 1 :(得分:1)

正如@leventov所说,你现在需要通过整个集合进行迭代,因为排序的集合目前不存在于Trove中。有一项功能请求here,您可以投票决定是否对您感兴趣。