[英]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 對象由於尺寸過大而無法處理數百萬行。
請給出建議。
嘗試組合一個巨大的字符串的問題在於,您必須將整個內容保存在內存中,然后才能對其進行進一步操作。
如果字符串太大而無法放入內存,您只有兩個選擇:
這個字符串可能是用於進一步處理的——也許它正在被寫入數據庫中的 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.