【问题标题】:Convert a list of integers into a comma-separated string将整数列表转换为逗号分隔的字符串
【发布时间】:2019-08-22 04:34:42
【问题描述】:

我试图将整数列表转换为逗号分隔的整数字符串。

Collectors.joining(CharSequence delimiter) - 返回一个收集器,它按照遇到的顺序连接输入元素,由指定的分隔符分隔。

List<Integer> i = new ArrayList<>();    //  i.add(null);
for (int j = 1; j < 6; j++) {
    i.add(j);
}
System.out.println(i.stream().collect(Collectors.joining(","))); // Line 8

第 8 行出现错误。

有没有办法通过 Java 8 中的流来做到这一点?

如果我用"1", "2", "3","4","5" 创建一个字符串列表。它有效。

【问题讨论】:

  • 错误信息是什么?
  • Stream 类型中的方法 collect(Collector super Integer,A,R>) 不适用于参数 (Collector )
  • 将此添加到问题中,而不是作为评论。
  • 您需要将Integers 映射到Strings` 才能使用joining。它专门返回Collector&lt;CharSequence, ?, String&gt;
  • 你可以再循环一个,并用逗号将值一个一个地赋予字符串。

标签: java java-8 integer java-stream collectors


【解决方案1】:

是的。但是,Stream&lt;Integer&gt; 没有 Collectors.joining;你需要一个Stream&lt;String&gt;,所以你应该在收集之前map。类似的,

System.out.println(i.stream().map(String::valueOf)
        .collect(Collectors.joining(",")));

哪些输出

1,2,3,4,5

此外,您可以通过多种方式生成Stream&lt;Integer&gt;

System.out.println(
        IntStream.range(1, 6).boxed().map(String::valueOf)
               .collect(Collectors.joining(","))
);

【讨论】:

  • 方法描述说“返回一个连接输入元素的收集器,由指定的分隔符分隔,按照遇到的顺序。”他们不应该提到输入元素应该只是字符串吗?
  • 另外,我认为它会自动调用 Integer 的 toString 方法来解决这个问题
  • 文档还指出:“返回:一个收集器,它连接 CharSequence 元素,由指定的分隔符分隔,按照遇到的顺序”(和返回类型是Collector&lt;CharSequence,​?,​String&gt;,即接受CharSequenceCollector)
  • @Naman 如果我不使用重载方法怎么办。我也可以使用Collectors.joining(),它表示“返回一个收集器,将输入元素按照遇到的顺序连接成一个字符串。”
  • 如果您阅读 entire 定义,它会显示 static Collector&lt;CharSequence,?,String&gt; joining​(CharSequence delimiter),它会告诉您它适用的类型 (CharSequence)。跨度>
【解决方案2】:

使用Apache Commons Lang 库非常容易。

Commons Lang

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
String str = org.apache.commons.lang.StringUtils.join(list, ","); // You can use any delimiter
System.out.println(str);  // Output: 1, 2, 3, 4, 5, 6, 7

Java 8 解决方案

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
String joinedList = list.stream().map(String::valueOf).collect(Collectors.joining(","));
System.out.println(joinedList);

【讨论】:

    【解决方案3】:

    使用Guavacom.google.common.base.Joiner

    String res = Joiner.on(",").join(integerlist);
    

    使用 Java 流 API

    String res = integerlist.stream()
                            .map(String::valueOf)
                            .collect(Collectors.joining(","));
    

    【讨论】:

      【解决方案4】:

      也许您的问题的答案可能是:

      List.toString()如下:

      List<Integer> intList = new ArrayList<Integer>();
      intList.add(1);
      intList.add(2);
      intList.add(3);
      
      String listString = intList.toString();
      System.out.println(listString); // <- this prints [1, 2, 3]
      

      在下面的这篇文章中,它得到了很好的解释。希望对您有用:

      Java: Convert List<Integer> to String

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        • 2011-06-12
        • 1970-01-01
        相关资源
        最近更新 更多