我在Java中有一个源HashMap:
HashMap<String, Integer> keyWordFrequencies;
存储各种长度的关键字。我想遍历这个HashMap并计算存储在map的String部分中的ngrams的长度,它定义了每个关键字的文本。
有了这些数据,我想填充HashMaps的目标ArrayList:
ArrayList<HashMap<String, Integer>> keywordNgrams;
结果,ArrayList的索引对应于给定关键字的ngram大小减去1,即keywordNGrams(0)将接收unigrams,keywordNGrams(1)将接收bigrams,依此类推。但我不确定必要的语法。遍历源HashMap很容易:
Set keyWordFrequenciesSet = keyWordFrequencies.entrySet();
Iterator keyWordFrequenciesIterator = keyWordFrequenciesSet.iterator();
while(keyWordFrequenciesIterator.hasNext()) {
Map.Entry m = (Map.Entry) keyWordFrequenciesIteratorIterator.next();
int ngramLength = String_Utils.getLengthOfNgram(m.getKey().toString());
Add element to keywordNgrams?
但是将元素添加到HashMap的目标ArrayList让我很困惑。我试过了:
keywordNgrams.add(ngramLength, m);
各种替代方案但无济于事。 m应该是HashMap的一个元素,而不是HashMap本身。任何人都可以建议我错在哪里吗?
理想情况下,我想遍历源HashMap keyWordFrequencies一次,并将keywordNgrams ArrayList初始化为可能的最大ngram大小。
答案 0 :(得分:1)
由于您正在处理大小为5的ArrayList,我建议在初始化ArrayList时,通过在每个索引处添加一个新的HashMap实例来实现。像这样:
ArrayList<HashMap<String, Integer>> keywordNgrams = new ArrayList<HashMap<String, Integer>> ();
for(int index = 0; index < 5; index++){
keywordNgrams .put(index, new HashMap<String, Integer>());
}
为了在ArrayList中添加元素,这是你要做的:
get(int index)
set(int index, E element)
。示例代码可能是这样的:
HashMap<String, Integer> returnedMap = keywordNgrams.get(index); //where index is the position in the list;
returnedMap.put(key, value); //where key & value is the information that you would want to add to your HashMap
keywordNgrams.set(index, returnedMap);
答案 1 :(得分:0)
由于你知道最大的ngram大小,我建议预先填充keywordNgrams
:
List<Map<String, Integer>> keywordNgrams =
new ArrayList<Map<String, Integer>>();
for(int i = 0; i < 5; ++i)
keywordNgrams.add(new HashMap<String, Integer>());
然后你可以写:
for(final String keyword : keyWordFrequencies.keySet())
keywordNgrams.get(String_Utils.getLengthOfNgram(keyword) - 1)
.put(keyword, keyWordFrequencies.get(keyword));