将两个列表展平为 String .csv 样式格式
Flatten two lists to be in String .csv style Format
我有两个列表,一个 List<String> headers
和一个 List<Row> rows
,本质上是一个 List<List<String>>
我正在尝试展平这些列表以获得所需的输出:
Name,ID,Value
John Doe,1111,XXX
Jane Doe,2222,YYY
我目前在迭代器中使用遍历 headers 列表并将它们附加到字符串构建器中
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();
}
}
您可以使用流,然后使用收集器加入。
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
按如下操作:
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
我有两个列表,一个 List<String> headers
和一个 List<Row> rows
,本质上是一个 List<List<String>>
我正在尝试展平这些列表以获得所需的输出:
Name,ID,Value
John Doe,1111,XXX
Jane Doe,2222,YYY
我目前在迭代器中使用遍历 headers 列表并将它们附加到字符串构建器中
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();
}
}
您可以使用流,然后使用收集器加入。
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
按如下操作:
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