Java печать элементов в списке древовидной карты - PullRequest
0 голосов
/ 20 февраля 2020

В настоящее время у меня есть TreeMap вида <String, List<List<String>>

Я пытаюсь записать свою карту дерева в выходной файл, где я получаю внутренние значения моей строки [], разделенные двоеточием.

Нужна ли секунда для l oop до l oop через каждый внутренний список и отформатировать его, используя .join(":", elements)?

Или есть более краткий способ сохранить все это в одном выражении для l oop?

Я пробовал несколько вещей, и мой текущий код:

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

Токовый выход:

ЛЮБОЙ, [[469, 470], [206, 1013, 1014], [2607, 2608]]

Желаемый выход:

ЛЮБОЙ, 469: 470, 206: 1013: 1014, 2607: 2608

Любые предложения будут с благодарностью.

1 Ответ

2 голосов
/ 20 февраля 2020

String.join(":", arr) можно использовать для получения массива String и возврата строки, разделенной двоеточием. Затем его можно использовать с Streams с Collector для объединения этих строк с запятым-разделителем, поэтому:

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
...