我如何使用 Java 8 流重写它?我还不太熟悉 Java 8 功能。
private final ArrayList<Double> ledger = new ArrayList<>();
/**
*
* @return the ledger as a String (e.g. "1.20|2.50|1.90")
*/
public String getLedgerString() {
StringJoiner sj = new StringJoiner("|","[","]");
for (double d : ledger)
sj.add(String.format("%.2f", d));
return sj.toString();
}
最佳答案
当您的所有信息已自包含在可流式传输列表中时,直接使用字符串连接器并不有效,因为您可以直接流式传输并使用 Collectors.joining
创建字符串。 .
这可以像这样使用:
ledger.stream()
.map(d->String.format("%.2f", d))
.collect(
Collectors.joining("|","[","]")
);
该方法的 3 个参数与您期望的 StringJoiner
相同。
上面的代码使用.stream()
循环遍历List
,然后.map()
将它们转换为字符串,最后收集它们使用Collectors.joining
。
Yuri Schimke还建议了另一种方法,您也可以使用DecimalFormat
来格式化数字。这可以通过以下方式完成:
ledger.stream()
.map(new DecimalFormat("0.00")::format)
.collect(
Collectors.joining("|","[","]")
);
它使代码稍微长一些,但优点是您可以轻松地将小数点分隔符更改为其他内容。
关于java - 使用 Java 8 Streams 为 ArrayList<Double> 输入重写 StringJoiner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35318563/