如何通过键值将 Map<String, List<String>> 转换为文件

How to transform Map<String, List<String>> into Files by Key Value

我有一个 Map<String, List<String>> 的数据结构,它遵循以下代码:

for (int i = 0; i < al_dwpi_par.size(); i++) { if (!hash_features_dwpi_dc.containsKey(al_dwpi_par.get(i).getGA())) { List<String> list = new ArrayList<String>(); list.add(al_dwpi_par.get(i).getDC());

            hash_features_dwpi_dc.put(al_dwpi_par.get(i).getGA(), list);
        } else {
            hash_features_dwpi_dc.get(al_dwpi_par.get(i).getGA()).add(al_dwpi_par.get(i).getDC());
        }
    }`

这会创建一个哈希 <key>,<List>,其中我的列表在每个位置存储与该键相关的信息。显然,哈希没有错误。

我正在尝试创建一个文件,其中该列表中的每个元素都是与该键相关的一行。想象一下,该哈希的一个元素是: <1997>,<ball, house, ball, monkey, light, banana>。我的文件最后应该是 1997.results.txt 和每一行:

ball house ball monkey light banana

我尝试遍历我的哈希和其他一些东西,但没有成功。甚至尝试使用 Guava(如一些类似帖子所建议的那样),也不太好。

欢迎任何 idea/example/suggestion。

听起来你只是在寻找

map.forEach((name, lines) -> {
    try {
       Files.write(Paths.get(name + ".results.txt"), lines);
    } catch (IOException e) {
       // do whatever
    }
});

...假设 Java 8 个可用。

很好的答案使用Java 8。这里我提出了我自己的方法,有点长,希望它能帮助你,或者如果Java 8不可用,可以作为参考。使用NIO也很有用:).

    public static void main(String[] args) throws IOException {
    //Given this information
    Map<String, List<String>> dataMap = new HashMap<String, List<String>>();

    List<String> valuesForKey = new ArrayList<String>();
    valuesForKey.add("ball");
    valuesForKey.add("house");
    valuesForKey.add("ball");
    valuesForKey.add("monkey");
    valuesForKey.add("light");
    valuesForKey.add("banana");

    dataMap.put("1997", valuesForKey);

    //I'd like to create a file:
    createTextFileFromMap(dataMap);
}

private static void createTextFileFromMap(Map<String, List<String>> dataMap) throws IOException {
    //Iterate the map to generate the number of files according to the items in your map
    for (Map.Entry<String, List<String>> entries : dataMap.entrySet()) {
        String filePath = "data/" + entries.getKey() + ".results.txt";//Generate a file with name based on key
        String formattedValues = getFormattedData(entries.getValue());//Format the list values to a line separated list
        BufferedWriter bwriter = new BufferedWriter(new FileWriter(new File(filePath)));//Use a BufferedWriter
        bwriter.write(formattedValues);//Write the content
        bwriter.close();//Close the writer
    }
}

//Just a method that will iterate over your list to put your strings of the list in a single String in which values will be separated by lines
private static String getFormattedData(List<String> valueList) {
    StringBuilder sbuilder = new StringBuilder();

    for (String word : valueList) {
        sbuilder.append(word).append(System.getProperty("line.separator"));
    }

    return sbuilder.toString();
}

编码愉快:)