如何在 Java 8 中引用 reduce() 操作的结果?

我试图用mkStringJava8 编写一个函数,这是一个 Scala 的有用函数,但mkString遇到了 2 个问题,我可以使用一些帮助:

  1. 我无法使mkString泛型 Collection 引用的第一个参数像Collection<Object> c并且让调用者调用任何类型的集合。

  2. 无法引用reduce()in-line 返回的结果来访问结果的长度以删除多余的前导分隔符。

这是代码:

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);

}


莫回无
浏览 111回答 3
3回答

梵蒂冈之花

请注意,如果您这样做不是为了自学,而是为了在某些生产代码中实际使用它,您可能需要考虑内置Collectors.joining收集器:String result = numbers.stream()&nbsp; &nbsp; .map(Object::toString)&nbsp; &nbsp; // or&nbsp; &nbsp; //&nbsp; &nbsp;.map(x -> x.toString())&nbsp; // exactly the same&nbsp; &nbsp; // or&nbsp; &nbsp; //&nbsp; &nbsp;.map(String::valueOf)&nbsp; &nbsp; // handles nulls by turning them to the string "null"&nbsp; &nbsp; .collect(Collectors.joining(","));它有几个重载,类似于 Scala 的mkString. 不过,此收集器仅接受CharSequences,因此您需要将值显式转换为字符串作为单独的map步骤。此外,还有一种String.join方法,它也适用于CharSequences 的集合。如果您特别有其中一个(例如List<String>),使用此方法可能更方便,而不是先将集合转换为流:List<String> strings = ...;String result = String.join(",", strings);// vsString result = strings.stream().collect(Collectors.joining(","))

慕斯709654

如果我没记错我的 java,您可以声明参数类型Collection<?>以便能够传递任何对象的集合。至于咬掉分隔符,我认为,只会.substring(1)做你想做的事。

aluckdog

你可以这样做:public&nbsp;static&nbsp;<T>&nbsp;&nbsp;String&nbsp;mkString(Collection<T>&nbsp;c,&nbsp;String&nbsp;sep)&nbsp;{&nbsp;//&nbsp;generic&nbsp;impl &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;c.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(String::valueOf) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.reduce("",&nbsp;(a,&nbsp;b)&nbsp;->&nbsp;a&nbsp;+&nbsp;sep&nbsp;+&nbsp;b) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.substring(1);&nbsp;//&nbsp;substring&nbsp;implementation&nbsp;to&nbsp;strip&nbsp;leading&nbsp;character}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java