Java 8中有很多有用的新功能。例如,我可以在对象列表上迭代流,然后从对象实例的特定字段中求和。如。
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
假设列表包含整数1,2,3,我期望连接的是“123”或“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流,然后将其简化为所有元素的连接。
注:这是O(n2)下的正常还原
为了获得更好的性能,请使用StringBuilder或类似F. Böller的答案的可变简化。
String s = list.stream().map(Object::toString).collect(Collectors.joining(","));
参考:流还原