使用Java8将对象列表转换为从toString()方法获得的string

Java8中有很多有用的新东西。 例如,我可以在一个对象列表上迭代一个stream,然后对来自Object实例的特定字段的值进行求和。 例如

 public class AClass{ int value; public int getValue(){return value;} } Integer sum = list.stream().mapToInt(AClass::getValue).sum(); 

因此,我争论是否有任何方法来构build一个String ,从一行中的实例连接toString()方法的输出。

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

假设list包含整数23 ,我期望concatenated"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将Integerstream转换为Stringstream,然后将其作为所有元素的串联进行简化。

注:这是在O(n 2 )中执行的normal reduction

为了获得更好的性能,可以使用StringBuilder或类似于F.Böller的答案。

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

参考: stream减less

有一个收集器joining API。 这是一个Collectors的静态方法。

 list.stream ().map (i -> i.toString ()).collect (Collectors.joining (",")) 

由于toString的必要调用,不完美,但工作。 不同的分隔符是可能的。

以防万一有人试图做到这一点没有Java 8,有一个相当不错的把戏。 List.toString()已经返回一个如下所示的集合:

[1,2,3]

根据您的具体要求,只要您的列表项不包含[]或,则可以将其后处理为任何您想要的内容。

例如:

 list.toString().replace("[","").replace("]","") 

要么

 String s=list.toString(); s = s.substring(1,s.length()-1) 

会给你一个相当合理的输出。

当我需要使用这样的一个string的多行列表时:

 list.toString().replace("[","").replace("]","").replaceAll(",","\r\n") 

如果你有一个数组,以Arrays.asList(list).toString()来代替

我会完全拥有这样的事实,即这不是最佳的,但它不像你想象的那样低效,而且阅读和记忆非常简单。 但是,它是非常不灵活的,所以如果你打算在一个特殊字符上键入你的数据不包含那个字符的话。

其他答案是好的。 但是,您也可以将Collectors.toList()作为parameter passing给Stream.collect(),以将元素作为ArrayList返回。

 System.out.println( list.stream().map( e -> e.toString() ).collect( toList() ) ); 
 String actual = list.stream().reduce((t, u) -> t + "," + u).get(); 

我们可以试试这个吗?

 public static void main(String []args){ List<String> stringList = new ArrayList<>(); for(int i=0;i< 10;i++){ stringList.add(""+i); } String stringConcated = String.join(",", stringList); System.out.println(stringConcated); } 

另外,你可以这样做。

  List<String> list = Arrays.asList("One", "Two", "Three"); String result = String.join(", ", list); System.out.println(result);