Java 打印树形图列表中的项目
Java print items in tree map list
我目前有一个 <String, List<List<String>>
形式的 TreeMap
我正在尝试将我的树图写入一个输出文件,在该文件中我得到了我的字符串 [] 的内部值,所有值都用冒号分隔。
我是否需要第二个 for 循环来遍历每个内部列表并使用 .join(":", elements)
对其进行格式化?
或者是否有更简洁的方法将其全部保存在单个 for 循环语句中?
我已经尝试了一些东西,我当前的代码是:
new File(outFolder).mkdir();
File dir = new File(outFolder);
//get the file we're writing to
File outFile = new File(dir, "javaoutput.txt");
//create a writer
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"))) {
for (Map.Entry<String, String[]> entry : allResults.entrySet()) {
writer.write(entry.getKey() + ", "+ Arrays.toString(entry.getValue()).replace("null", "").toString());
writer.newLine();
}
当前输出:
ANY, [[469, 470], [206, 1013, 1014], [2607, 2608]]
期望输出:
ANY, 469:470, 206:1013:1014, 2607:2608
如有任何建议,我们将不胜感激。
String.join(":", arr)
可用于获取字符串数组,return 可用于获取冒号分隔的字符串。然后可以将其与带有收集器的 Streams 一起使用,以使用逗号分隔符连接这些字符串,因此:
TreeMap<String, String[]> allResults = new TreeMap<>();
allResults.put("a", new String[]{"469", "470"});
allResults.put("b", new String[]{"206", "1013", "1014"});
allResults.put("c", new String[]{"2607", "2608"});
String result = allResults.entrySet().stream()
.map(e -> String.join(":", e.getValue()))
.collect(Collectors.joining(", "));
System.out.println(result);
产生:
469:470, 206:1013:1014, 2607:2608
对于 List<List<String>>
,您需要一个流中的一个流,因此:
TreeMap<String, List<List<String>>> allResults = new TreeMap<>();
allResults.put("a", Arrays.asList(Arrays.asList("469", "470"), Arrays.asList("206", "1013", "1014"), Arrays.asList("2607", "2608")));
allResults.put("b", Arrays.asList(Arrays.asList("169", "470")));
allResults.put("c", Arrays.asList(Arrays.asList("269", "470")));
String result = allResults.entrySet().stream()
.map(i -> i.getKey() + "," + i.getValue().stream().map(elements -> String.join(":", elements))
.collect(Collectors.joining(", "))
)
.collect(Collectors.joining("\n"));
System.out.println(result);
产生:
a,469:470, 206:1013:1014, 2607:2608
b,169:470
c,269:470
我目前有一个 <String, List<List<String>>
我正在尝试将我的树图写入一个输出文件,在该文件中我得到了我的字符串 [] 的内部值,所有值都用冒号分隔。
我是否需要第二个 for 循环来遍历每个内部列表并使用 .join(":", elements)
对其进行格式化?
或者是否有更简洁的方法将其全部保存在单个 for 循环语句中?
我已经尝试了一些东西,我当前的代码是:
new File(outFolder).mkdir();
File dir = new File(outFolder);
//get the file we're writing to
File outFile = new File(dir, "javaoutput.txt");
//create a writer
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"))) {
for (Map.Entry<String, String[]> entry : allResults.entrySet()) {
writer.write(entry.getKey() + ", "+ Arrays.toString(entry.getValue()).replace("null", "").toString());
writer.newLine();
}
当前输出:
ANY, [[469, 470], [206, 1013, 1014], [2607, 2608]]
期望输出:
ANY, 469:470, 206:1013:1014, 2607:2608
如有任何建议,我们将不胜感激。
String.join(":", arr)
可用于获取字符串数组,return 可用于获取冒号分隔的字符串。然后可以将其与带有收集器的 Streams 一起使用,以使用逗号分隔符连接这些字符串,因此:
TreeMap<String, String[]> allResults = new TreeMap<>();
allResults.put("a", new String[]{"469", "470"});
allResults.put("b", new String[]{"206", "1013", "1014"});
allResults.put("c", new String[]{"2607", "2608"});
String result = allResults.entrySet().stream()
.map(e -> String.join(":", e.getValue()))
.collect(Collectors.joining(", "));
System.out.println(result);
产生:
469:470, 206:1013:1014, 2607:2608
对于 List<List<String>>
,您需要一个流中的一个流,因此:
TreeMap<String, List<List<String>>> allResults = new TreeMap<>();
allResults.put("a", Arrays.asList(Arrays.asList("469", "470"), Arrays.asList("206", "1013", "1014"), Arrays.asList("2607", "2608")));
allResults.put("b", Arrays.asList(Arrays.asList("169", "470")));
allResults.put("c", Arrays.asList(Arrays.asList("269", "470")));
String result = allResults.entrySet().stream()
.map(i -> i.getKey() + "," + i.getValue().stream().map(elements -> String.join(":", elements))
.collect(Collectors.joining(", "))
)
.collect(Collectors.joining("\n"));
System.out.println(result);
产生:
a,469:470, 206:1013:1014, 2607:2608
b,169:470
c,269:470