Java 8 中有很多有用的新东西。例如,我可以用流遍历对象列表,然后对Object‘ 实例的特定字段中的值求和。例如
Object
public class AClass { private int value; public int getValue() { return value; } } Integer sum = list.stream().mapToInt(AClass::getValue).sum();
因此,我在问是否有任何方法可以构建将来自实例String的方法的输出连接在toString()一行中的方法。
String
toString()
List<Integer> list = ... String concatenated = list.stream().... //concatenate here with toString() method from java.lang.Integer class
假设list包含整数和1,我希望它是or 。2``3``concatenated``"123"``"1,2,3"
list
1
2``3``concatenated``"123"``"1,2,3"
一种简单的方法是将列表项附加到StringBuilder
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 流,然后将其归约为所有元素的串联。
注意:这是normal reduction在 O(n 2 )中执行的
normal reduction
为了获得更好的性能,请使用StringBuilder或mutable reduction类似于 F. Böller 的答案。
mutable reduction
String s = list.stream().map(Object::toString).collect(Collectors.joining(","));
参考:流减少