(import java.nio.file.Files)(import java.nio.file.Paths)(import java.util.stream.Stream)(def path (Paths/get "." (into-array ["data" "10000000.test.log"])))(def stream (Files/lines path))這樣我就有了:stream#object[java.util.stream.ReferencePipeline$Head 0x50129b8f"java.util.stream.ReferencePipeline$Head@50129b8f"]有沒有辦法在不耗盡內(nèi)存的情況下迭代它?對SO的建議并沒有多大幫助。文件大約1G。
2 回答

浮云間
TA貢獻1829條經(jīng)驗 獲得超4個贊
做與在 java 中做的同樣的事情。對其調(diào)用互操作方法,例如(.map stream ...)
或其他任何方法,然后將其收集到最后的列表中,或減少它,或任何您需要執(zhí)行的操作。
Clojure 函數(shù)不實現(xiàn)流所需的接口,例如 java.util.function.Function,因此您需要使用 reify 而不是簡單的fn
:
(.map stream (reify java.util.function.Function (apply [this x] (foo x))))

梵蒂岡之花
TA貢獻1900條經(jīng)驗 獲得超5個贊
我想迭代流 Java/命令式風格以避免堆爆。我不需要減少流,我需要處理每一行并取出一個字段并將其發(fā)送出去。我認為為此我可能最好使用doseq。
(doseq [l (iterator-seq (.iterator stream))] (println l))
添加回答
舉報
0/150
提交
取消