繁体   English   中英

Java - 如何将多个列表值连接到一个字符串中,每个值的末尾都有分隔符

[英]Java - How to join many list values into a single string with delimiter at end of each value

如何通过在每行末尾附加 '\\n' 将数百万个值的列表连接到单个字符串中 -

输入数据在一个列表中:

   list[0] = And the good south wind still blew behind,
   list[1] =  But no sweet bird did follow,
   list[2] =  Nor any day for food or play
   list[3] =  Came to the mariners' hollo!

下面的代码通过在末尾附加换行符将列表连接成一个字符串 -

String joinedStr = list.collect(Collectors.joining("\n", "{", "}"));    

但是,问题是如果列表有数百万个数据,则加入失败。 我的猜测是 String 对象由于尺寸过大而无法处理数百万行。

请给出建议。

尝试组合一个巨大的字符串的问题在于,您必须将整个内容保存在内存中,然后才能对其进行进一步操作。

如果字符串太大而无法放入内存,您只有两个选择:

  1. 增加可用内存,或
  2. 首先避免在内存中保留一个巨大的字符串

这个字符串可能是用于进一步处理的——也许它正在被写入数据库中的 blob,或者它可能是 HTTP 响应的正文。 它不是为了好玩而建造的。

写入某种可以一次读取一个字符的流(可能是OutputStream的实现)可能更可取。 如果消费者知道您发送的内容的上下文,他们可以选择根据分隔符进行缓冲,或者他们可以等到他们拥有全部内容。

最好使用支持背压的东西,以便在消费者太慢时暂停写入。

究竟这看起来如何取决于您要完成的任务。

也许您可以使用专门为处理大型字符串而设计的 StringBuilder 来实现。 这是我的做法:

StringBuilder sb = new StringBuilder();
for (String s : list) sb.append(s).append("\n");

return s.toString();

虽然尚未测试此代码,但它应该可以工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM