2

我有一张词频图Map<String, Integer>。我需要制作一组最少出现的单词。假设最低出现的词都出现了两次,我需要将所有这些重复出现的词做一组。到目前为止,我有:

public Set findRarest()
{
    int occurrence = 1000;  //high initial value for word length
    for (Map.Entry<String,Integer> item : wcMap.entrySet())
    {
        if (item.getValue() > occurrence);        //most likely for performance
        else if (item.getValue() == occurrence)
        {
            rarest.add(item.getKey());
        }
        else                                      //found new lowest count
        {
            rarest.clear();
            rarest.add(item.getKey());
        }
    }
    return rarest;
}

这对我来说似乎有点令人费解。是否有本地收集工具来完成这项工作?

4

1 回答 1

1

我认为您的代码甚至无法按书面方式工作。两件事情:

  1. occurrence使用Integer.MAX_VALUE而不是仅使用一些任意大值进行初始化。

  2. occurrence每当您发现一个出现频率较低的单词时,更新 的值。

除此之外,您的解决方案很好。我不确定您是否可以更清晰地将自己限制在Java Collections Framework类中。

更新代码:

public Set findRarest()
{
    Set<String> rarest = new HashSet<String>();

    int occurrence = Integer.MAX_VALUE;  //high initial value for word length
    for (Map.Entry<String,Integer> item : wcMap.entrySet())
    {
        if (item.getValue() == occurrence)
        {
            rarest.add(item.getKey());
        }
        else if ( item.getValue() < occurrence )
        {
            occurrence = item.getValue();
            rarest.clear();
            rarest.add(item.getKey());
        }
    }
    return rarest;
}
于 2012-04-22T18:44:21.740 回答