我有两份名单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;
}
}
我本来也想用同样的方法来做行,然而我感觉我这样做难度很大,最后我得把每行末尾的逗号去掉。有没有更好的方法来完成这个任务?在正确的方向上的推敲将是有帮助的。还有什么需要的我也可以分享给大家,只要留言就可以了。
Name,ID,Value
[John Doe, 1111, XXX]
[Jane Doe, 2222, YYY]
你可以使用 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();
}
}
做法如下。
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
你可以使用流,然后加入 使用收集器。
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