簡體   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