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”。


当前回答

StringListName = ObjectListName.stream()。map(m -> m. tostring())。collect(collections . tolist ());

其他回答

其他答案都没问题。但是,你也可以将collections . tolist()作为参数传递给Stream.collect(),以数组列表的形式返回元素。

System.out.println( list.stream().map( e -> e.toString() ).collect( toList() ) );

以防有人试图在没有java 8的情况下做到这一点,这里有一个非常好的技巧。List.toString()已经返回一个类似这样的集合:

[1, 2, 3]

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

例如:

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

或者如果你的数据可能包含方括号:

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

会得到一个相当合理的输出。

每行上可以创建一个数组项,如下所示:

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

我使用这种技术从一个小应用程序的列表中制作html工具提示,如下所示:

list.toString().replace("[","<html>").replace("]","</html>").replaceAll(",","<br>")

如果你有一个数组,那么从Arrays.asList(list).toString()开始

我完全承认这不是最优的事实,但它并不像您想象的那么低效,而且很容易阅读和理解。然而,它是相当不灵活的——特别是不要尝试用replaceAll来分隔元素,如果您的数据中可能包含逗号,如果您的数据中有方括号,则使用子字符串版本,但对于数字数组来说,它几乎是完美的。

在String API中有一个方法用于那些“连接字符串列表”的用例,你甚至不需要Stream。

List<String> myStringIterable = Arrays.asList("baguette", "bonjour");

String myReducedString = String.join(",", myStringIterable);

// And here you obtain "baguette,bonjour" in your myReducedString variable

StringListName = ObjectListName.stream()。map(m -> m. tostring())。collect(collections . tolist ());

Java 8+

String s = Arrays.toString(list.stream().toArray(AClass[]::new));

虽然不是最有效的,但它是一种只需少量代码的解决方案。