将两个列表扁平化为字符串.csv样式的格式。

问题描述 投票:0回答:1

我有两份名单a List<String> headers 和a List<Row> rows 这本质上是一个 List<List<String>>我正试图将这些列表扁平化,以获得这个理想的输出。

Name,ID,Value
John Doe,1111,XXX
Jane Doe,2222,YYY

我现在用迭代器翻看头条列表,然后把它们追加到一个字符串生成器中,就像这样。

        List<String> headers = ((RowListResult) result).getHeaders();
        List<RowListResult.Row> rows = ((RowListResult) result).getRows();

        output = output.concat(String.join(",", headers)).concat("\n");
        for(RowListResult.Row row: rows) output = output.concat(String.join(",", row.getColumns().toString()).concat("\n")).replace("/[[]]/", "");

        System.out.println(output);
        return null;
    }
}

我本来也想用同样的方法来做行,然而我感觉我这样做难度很大,最后我得把每行末尾的逗号去掉。有没有更好的方法来完成这个任务?在正确的方向上的推敲将是有帮助的。还有什么需要的我也可以分享给大家,只要留言就可以了。

数据。Data in Debugger

Name,ID,Value
[John Doe, 1111, XXX]
[Jane Doe, 2222, YYY]
java flat-file
1个回答
1
投票

你可以使用 String.join():

import java.util.Arrays;
import java.util.List;

class Main {
  public static void main(String[] args) {
    List<String> headers = Arrays.asList("header1","header2","header3");

    List<String> row1 = Arrays.asList("cell1","cell2","cell3");
    List<String> row2 = Arrays.asList("cell1","cell2","cell3");
    List<List<String>> rows = Arrays.asList(row1, row2);

    System.out.println(toString(headers, rows));
  }

  private static String toString(List<String> headers, List<List<String>> rows) {
    StringBuilder str = new StringBuilder();
    str.append(String.join(", ", headers)).append("\n");
    for (List<String> row: rows) str.append(String.join(", ", row)).append("\n");
    return str.toString();
  }
}

1
投票

做法如下。

import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> header = List.of("Name", "ID", "Value");
        List<List<String>> values = List.of(List.of("John Doe", "1111", "XXX"), List.of("Jane Doe", "2222", "YYY"));
        StringBuilder sb = new StringBuilder();
        sb.append(String.join(",", header).replace("[", "").replace("]", ""));
        for (List<String> valueList : values) {
            sb.append(System.lineSeparator()).append(String.join(",", valueList).replace("[", "").replace("]", ""));
        }

        // Display
        System.out.println(sb);
    }
}

输出。

Name,ID,Value
John Doe,1111,XXX
Jane Doe,2222,YYY

0
投票

你可以使用流,然后加入 使用收集器。

class Row {
    final List<String> values;
}

class Header {
    final List<String> headers;
}

@Test
public void test() {
    Header header = new Header(Arrays.asList("Name", "Number", "Description"));
    List<Row> row = Arrays.asList(new Row(Arrays.asList("John Doe", "111", "XXX")), new Row(Arrays.asList("John Doe", "112", "XXX")));

    String headerString = header.headers.stream().collect(Collectors.joining(","));
    System.out.println(headerString);

    List<String> listOfValues  = row.stream()
        .map(x -> x.values)
        .map(y -> y.stream().collect(Collectors.joining(",")))
        .collect(Collectors.toList());
    System.out.println(listOfValues);
}

输出:你可以使用流,然后使用收集器加入。

Name,Number,Description
John Doe,111,XXX
John Doe,112,XXX
© www.soinside.com 2019 - 2024. All rights reserved.