Map <string,integer =“”> </string,>中的问题计数

时间:2010-02-04 04:17:04

标签: java map arraylist

我问了一个question关于计算一个单词在ArrayList中的次数:

ACU ACU ACU ACU ACY ACY AER AER AER AGC

所以对于 ACU我们会得到4,
ACY我们会得到2,
AER我们会得到3,
AGC我们将获得1.

我得到了一些帮助,但我无法使其发挥作用 达伦给了我一个非常重要的答案:

Map<String, Integer>wordCount = new HashMap<String, int>();
  for(String seq : yourWordList){
     wordCount.put(seq, wordCount.get(seq++));
  }

但在wordCount.put(seq, wordCount.get(seq++));部分 我得到一个错误,无法从String转换为int,我试图修改代码工作 但我的数字不正确

ACU 0 ACU 1 ACU 1 ACU 1 ACY 1 ACY 2 AER 2 AER 3 AER 3

int value=0;
Map<String, Integer>wordCount = new HashMap<String, Integer>();
for(String seq : WordList){
  Set<String> set = wordCount.keySet();
  value = set.size();
  wordCount.put(seq, value));
}

请帮我解决这个问题。谢谢大家。

3 个答案:

答案 0 :(得分:3)

你想要的是:

Map<String, Integer>wordCount = new HashMap<String, Integer>();
for (String seq : yourWordList) {
  Integer count = wordCount.get(seq);
  wordCount.put(seq, count == null ? 1 : count + 1);
}

Map来自StringIntegerInteger是不可变的,因此您无法将其递增。您必须检索当前值,增加它并将其放回。你试图打电话给wordCount.get(seq++),这没什么意义。必须在get()中传递String(对于此类Map),并且无论如何都不能在不可变++上使用Integer

答案 1 :(得分:2)

wordCount.get(seq++)可能是问题 - 尝试递增get方法的返回值(现在你显然试图增加String参数,触发错误。尝试将其更改为wordCount.get(seq)+1

答案 2 :(得分:2)

使用Multiset中的Guava的替代解决方案。

Multiset<String> words = HashMultiset.create();
for (String word : wordList)
    words.add(word);

for (String word : words.elementSet())
    System.out.println(word + ": " + words.count(word));