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,即“ words”。现在,我希望解析器看到“ 000000000”这是我的定界符,然后将一个新的Map添加到List中,然后将键和值插入其中。如果未看到“ 000000000”,则将键和值添加到同一映射中。
请帮我解决这个问题,因为即使经过很多努力我也无法做到。

最佳答案

我想listOfHash将包含您所有的地图...

因此,例如将words重命名为currentMap并添加到其中。当看到“ 000000000”时,实例化一个新的Map,将其分配给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"
}


并且不要忘记将初始Map添加到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);
    }

}

10-06 16:08