Map<String, List<String>> words = new HashMap<String, List<String>>();
List<Map> listOfHash = new ArrayList<Map>();
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
String word = getTagValue("word", eElement);
List<String> add_word = new ArrayList<String>();
String pos = getTagValue("POS", eElement);
if(words.get(pos)!=null){
add_word.addAll(words.get(pos));
add_word.add(word);
}
else{
add_word.add(word);
}
words.put(pos, add_word);
}
}
这是我编写的一段代码(它使用的是Stanford CoreNLP)。我面临的问题是,目前这段代码只能使用一个Map,即“单词”。现在,我希望一旦解析器看到“000000000”这是我的分隔符,那么应该将新的Map添加到List中,然后将键和值插入其中。如果它没有看到“000000000”,则键和值将添加到同一个Map中。 请帮助我,因为即使经过很多努力我也无法做到这一点。
答案 0 :(得分:2)
我猜listOfHash是要包含你的所有地图......
例如,将words
重命名为currentMap
并添加到其中。当您看到“000000000”实例化新地图时,将其分配给currentMap
,将其添加到列表中并继续...
类似的东西:
if ("000000000".equals(word)){
currentMap = new HashMap<String, List<String>>();
listOfHash.add(currentMap);
continue; // if we wan't to skip the insertion of "000000000"
}
不要忘记将您的初始地图添加到listOfHash。
我也看到你的代码有其他问题,这里是修改版本(我还没试过编译):
Map<String, List<String>> currentMap = new HashMap<String, List<String>>();
List<Map> listOfHash = new ArrayList<Map>();
listOfHash.add(currentMap);
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
String word = getTagValue("word", eElement);
if ("000000000".equals(word)){
currentMap = new HashMap<String, List<String>>();
listOfHash.add(currentMap);
continue; // if we wan't to skip the insertion of "000000000"
}
String pos = getTagValue("POS", eElement);
List<String> add_word = currentMap.get(pos);
if(add_word==null){
add_word = new ArrayList<String>();
currentMap.put(pos, add_word);
}
add_word.add(word);
}
}