有一种方法可以从类接收数据并将其以所需格式收集到工作表中。我用循环实现了这个,但我需要使用 JAVA 8 API 的魅力,所以我尝试用 .stream() 替换循环,但到目前为止没有成功。我怎样才能做到这一点?
private ArrayList<String> collectReport() {
String timeFormat = "m:ss.SSS";
String reportFormat = "%d. %s | %s | %s";
int counter = 0;
ArrayList<String> list = new ArrayList<>();
for (ReportRecord dataRecord : recordList) {
String name = dataRecord.getName();
String team = dataRecord.getTeam();
String time = LocalTime.ofNanoOfDay(dataRecord.getTimeDiff()).format(DateTimeFormatter.ofPattern(timeFormat));
list.add(String.format(reportFormat, (1 + counter++), name, team, time));
if (counter == 15) {
list.add("—".repeat(60));
}
}
return list;
}
recordList
创建一个单独的方法将列表元素转换为字符串,然后使用它IntStream
来获取索引流并将索引转换为字符串是有意义的。分隔符可以单独添加。
在 Java 16 及更高版本中,您可以使用该方法
Stream::toList
获取不可修改的字符串列表。但是,如果分隔符字符串必须作为单独的元素在结果列表中,您可以稍微修改呈现的方法
recordToString
,使其返回字符串流,然后您需要对其应用操作Stream::flatMap
。此外,要获得特定的实现
ArrayList<String>
,您可以使用收集器Collectors.toCollection(ArrayList::new)
而不是通常的Collectors.toList()
.