我有一张地图(instaWords),里面装满了数以千计的单词。我需要一次循环N项。这是我的代码。在这段代码中,我需要读取例如500字的块中的instaWords并执行" updateInstaPhrases"用那些话。有什么帮助吗?
private static Map<InstaWord, List<Integer>> instaWords = new HashMap<InstaWord, List<Integer>>();
// here a couple of words are added to instaWords
updateInstaPhrases(instaWords);
private static void updateInstaPhrases(Map<InstaWord, List<Integer>> wordMap)
throws SQLException, UnsupportedEncodingException {
for (Map.Entry<InstaWord, List<Integer>> entry : wordMap.entrySet()) {
InstaWord instaWord = entry.getKey();
List<Integer> profiles = entry.getValue();
pst.setBytes(1, instaWord.word.getBytes("UTF-8"));
pst.setBytes(2, instaWord.word.getBytes("UTF-8"));
pst.setBytes(3, (instaWord.lang == null) ?·
"".getBytes("UTF-8") :·
instaWord.lang.getBytes("UTF-8"));
String profilesList = "";
boolean first = true;
for (Integer p : profiles) {
profilesList += (first ? "" : ", ") + p;
first = false;
}
pst.setString(4, profilesList);
pst.addBatch();
}
System.out.println("Words batch executed");
pst.executeBatch();
con.commit();
}
我需要的是在块中迭代一个哈希映射&#39; (例如每次500件)
答案 0 :(得分:1)
您可以保留一个计数器,初始化为0并为每个项目增加,同时收集您认为合适的项目(例如,ArrayList<Map.Entry<InstaWord, List<Integer>>>
)。如果计数器(增量后)等于500,则处理整批,将计数器重置为0并清除集合。
另一种选择是让计数器控制循环并明确声明从中绘制Map.Entry
的迭代器。通过这种方式,发生的事情可能会更加清晰。