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

2024-02-16

Java 8 中有很多有用的新东西。例如,我可以使用流遍历对象列表,然后对对象的特定字段中的值求和。Object的实例。例如。

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

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

因此,我想问是否有任何方法可以构建一个String连接的输出toString()方法来自单行中的实例。

List<Integer> list = ...

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

假设list包含整数1, 2 and 3,我期望concatenated is "123" or "1,2,3".


一种简单的方法是将列表项附加到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 将 Integer 流转换为 String 流,然后将其缩减为所有元素的串联。

Note: This is normal reduction which performs in O(n2)

为了获得更好的性能,请使用StringBuilder or mutable reduction类似于 F. Böller 的回答。

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

Ref: 流量减少 https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html#Reduction

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐