如何通过键值将 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();
}
编码愉快:)
我有一个 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();
}
编码愉快:)