首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java 8中引用减()操作的结果?

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

Stack Overflow用户
提问于 2019-02-02 19:44:01
回答 4查看 762关注 0票数 11

我试图用mkString Java8编写一个mkString函数,这是一个la Scala的有用mkString,我遇到了两个问题,我需要一些帮助:

  1. 我无法使mkString的第一个参数成为像Collection<Object> c一样的泛型集合引用,并且让调用者调用任何类型的集合。
  2. 无法在行中引用reduce()返回的结果来访问结果的长度以删除额外的前导分隔符。

下面是代码:

代码语言:javascript
运行
复制
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);
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-02-02 20:47:08

请注意,如果您这样做不是为了自我教育,而是为了在某些生产代码中实际使用它,您可能需要考虑内置的Collectors.joining收集器:

代码语言:javascript
运行
复制
String result = numbers.stream()
    .map(Object::toString)
    // or
    //   .map(x -> x.toString())  // exactly the same
    // or
    //   .map(String::valueOf)    // handles nulls by turning them to the string "null"
    .collect(Collectors.joining(","));

它有几个重载,类似于Scala的mkString。不过,此收集器只接受CharSequence,因此需要将值显式转换为字符串,作为单独的map步骤。

此外,还有String.join方法,它也适用于CharSequence的集合。如果您有其中一个方法(例如List<String>),那么使用此方法可能更方便,而不是首先将集合转换为流:

代码语言:javascript
运行
复制
List<String> strings = ...;

String result = String.join(",", strings);

// vs

String result = strings.stream().collect(Collectors.joining(","))
票数 11
EN

Stack Overflow用户

发布于 2019-02-02 19:52:20

如果我正确地记住了我的java,您可以将参数类型声明为Collection<?>,以便能够传递任何对象的集合。

至于咬掉分离器,我想,只要.substring(1)做你想做的事。

票数 5
EN

Stack Overflow用户

发布于 2019-02-02 20:05:15

你可以这样做:

代码语言:javascript
运行
复制
public static <T>  String mkString(Collection<T> c, String sep) { // generic impl
    return c.stream()
            .map(String::valueOf)
            .reduce("", (a, b) -> a + sep + b)
            .substring(1); // substring implementation to strip leading character
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54496864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档