首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用streams将对象列表转换为从toString方法获得的字符串

使用streams将对象列表转换为从toString方法获得的字符串
EN

Stack Overflow用户
提问于 2014-07-22 16:54:38
回答 12查看 431.8K关注 0票数 249

在Java8中有很多有用的新东西。例如,我可以用一个流遍历一系列对象,然后对Object实例的特定字段的值求和。

代码语言:javascript
运行
复制
public class AClass {
  private int value;
  public int getValue() { return value; }
}

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

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

代码语言:javascript
运行
复制
List<Integer> list = ...

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

假设list包含整数123,我希望concatenated"123""1,2,3"

EN

回答 12

Stack Overflow用户

发布于 2014-07-22 17:56:11

接口中有一个收集器joining。它是Collectors中的静态方法。

代码语言:javascript
运行
复制
list.stream().map(Object::toString).collect(Collectors.joining(","))

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

票数 223
EN

Stack Overflow用户

发布于 2015-10-29 06:42:46

如果有人想在不使用java8的情况下做到这一点,这里有一个很好的技巧。List.toString()已经返回了一个如下所示的集合:

1,2,3

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

例如:

代码语言:javascript
运行
复制
list.toString().replace("[","").replace("]","") 

或者,如果您的数据可能包含方括号,则如下所示:

代码语言:javascript
运行
复制
String s=list.toString();
s = s.substring(1,s.length()-1) 

会让你得到一个相当合理的产出。

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

代码语言:javascript
运行
复制
list.toString().replace("[","").replace("]","").replaceAll(",","\r\n")

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

代码语言:javascript
运行
复制
list.toString().replace("[","<html>").replace("]","</html>").replaceAll(",","<br>")

如果您有一个数组,则改为从Arrays.asList(list).toString()开始

我完全承认这并不是最优的,但它并不像你想象的那样效率低下,而且读起来和理解起来都很简单。但是,它非常不灵活--特别是如果数据中可能包含逗号,就不要尝试用replaceAll分隔元素,如果数据中有方括号,就使用子字符串版本,但是对于数字数组来说,这种方法非常完美。

票数 10
EN

Stack Overflow用户

发布于 2020-01-27 17:59:12

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

代码语言:javascript
运行
复制
List<String> myStringIterable = Arrays.asList("baguette", "bonjour");

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

// And here you obtain "baguette,bonjour" in your myReducedString variable
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24882927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档