【问题标题】:How to transform Map<String, List<String>> into Files by Key Value如何通过键值将 Map<String, List<String>> 转换为文件
【发布时间】:2016-02-11 21:31:17
【问题描述】:

我有一个Map&lt;String, List&lt;String&gt;&gt; 的数据结构,它遵循以下代码:

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());
        }
    }`

这将创建一个哈希&lt;key&gt;,&lt;List&gt;,其中我的列表存储与该键相关的每个位置信息。显然该哈希没有错误。

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

ball house ball monkey light banana

我尝试遍历我的 Hash 和其他一些东西,但没有成功。甚至尝试与 Guava 一起工作(正如一些类似帖子所建议的那样),也不好。

欢迎提出任何想法/示例/建议。

【问题讨论】:

    标签: java file hash hashmap guava


    【解决方案1】:

    听起来你只是在寻找

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

    ...假设 Java 8 可用。

    【讨论】:

    • Java 8 确实可用,我会试试看。谢谢。
    • 像手套一样工作。 :-) 我第一次在 JAVA 中看到这种结构
    • @brso05 不知道谁投了反对票,可以查一下吗?
    • 不可能知道谁投了反对票。这是一种非常糟糕的行为,因为这是一个非常好的解决方案,并且很好地利用了 Java 8 的特性。
    【解决方案2】:

    使用 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();
    }
    

    编码愉快:)

    【讨论】:

    • 非 Java-8 的好选择。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2021-12-21
    • 2015-11-21
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多