【发布时间】:2019-06-27 01:20:14
【问题描述】:
我试图在 Java8 中编写一个 mkString 函数,这是一个 Scala 的有用 mkString 并遇到了 2 个我可以使用一些帮助的问题:
我无法将
mkString的第一个参数设置为像Collection<Object> c这样的通用集合引用,并让调用者调用任何类型的集合。无法通过内联引用
reduce()返回的结果来访问结果的长度以删除多余的前导分隔符。
代码如下:
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
System.out.println(mkString(numbers, ","));
}
public static String mkString(Collection<Integer> c, String sep) {
return c.stream()
.map(e -> String.valueOf(e))
.reduce("", (a, b) -> a + sep + b)
.substring(1, <<>>.length);
}
【问题讨论】:
-
使用 reduce 来构建字符串的效率非常低。每个元素都需要累加器字符串的完整副本。最好使用专用的连接函数,它可以使用字符串生成器之类的东西。
标签: java scala lambda java-stream reduce