簡體   English   中英

將字符串流轉換為字符串分組列表的有效方法

[英]Effecient way to convert a stream of Strings into grouped list of strings

我有一個將接收Stream<String>的函數。 此流表示文件中的行(如Files.lines(somePath)所調用)。 文件本身實際上是將許多文件合並為一個文件,如下所示:

__HEADER__ # for file 1
data
more data
...
__HEADER__ # file 2 starts here
some more data...
...

我需要將流轉換為文件系統上的多個物理文件。

我嘗試了一種簡單的方法,大致類似於:

String allLinesJoined = lineStream.collect(Collectors.joining());
// This solution seems to get stuck on the line above ^
String files[] = allLinesJoined.split("__HEADER__");
for (fileStr : files)
{
    // This function will write each fileStr to a separate file
    // (filename is determined by contents of fileStr)
    writeToPhysicalFile(fileStr);
}

但是輸入文件約為300 MB(並且可能會更大),這種解決方案似乎卡在了第一行。 如果我有更多的內存,也許會完成...?

如果我的起點是Stream<String> ,是否有更好的方法來執行此操作,還是應該開始進行其他更改,以使這部分代碼可以逐行讀取文件而無需使用流API?

(在這些文件的上下文中,行的順序很重要)

TL;博士

我需要將一個表示為Stream<String>大文件轉換成許多小文件。 每個小文件都以__HEADER__開頭, __HEADER__各行,直到下一個__HEADER__ 當前的庫使用流來提供文件,但是是否值得嘗試使用流來這樣做,還是如果我將庫更改為提供非流功能,我的生活會更輕松嗎?

這扼殺了流的全部想法。

嘗試forEach():

    Stream<String> lineStream = Files.lines(Paths.get("your_file"));

    lineStream.forEachOrdered((s) -> {
        if ("HEADER".equals(s)) {
            // create new file
        }
        else {
            // append to this file
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM