使用流将对象列表转换为从 toString 方法获取的字符串

2022-08-31 05:30:04

Java 8中有很多有用的新东西。例如,我可以使用流对对象列表进行迭代,然后对 来自 实例的特定字段的值求和。例如:Object

public class AClass {
  private int value;
  public int getValue() { return value; }
}

Integer sum = list.stream().mapToInt(AClass::getValue).sum();

因此,我问是否有任何方法可以构建一个将实例中的方法输出连接在一行中。StringtoString()

List<Integer> list = ...

String concatenated = list.stream().... //concatenate here with toString() method from java.lang.Integer class

假设包含整数 ,并且 ,我期望它是 or 。list123concatenated"123""1,2,3"


答案 1

一种简单的方法是将列表项追加到StringBuilder

List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);

StringBuilder b = new StringBuilder();
list.forEach(b::append);

System.out.println(b);

你也可以试试:

String s = list.stream().map(e -> e.toString()).reduce("", String::concat);

说明: map 将整数流转换为字符串流,然后将其简化为所有元素的串联。

注意:这是在O(n2)中执行的normal reduction)

为了获得更好的性能,请使用 a 或类似 F. Böller 的答案。StringBuildermutable reduction

String s = list.stream().map(Object::toString).collect(Collectors.joining(","));

参考:流减少


答案 2

API 中有一个收集器。它是 中的静态方法。joiningCollectors

list.stream().map(Object::toString).collect(Collectors.joining(","))

由于必要的调用,不完美,但有效。可以使用不同的分隔符。toString


推荐