In this case, I wouldn’t even bother with the Stream.map calls. The extra indirection is slowing you down and adding complexity for no real benefit. Thanks to @dimitarvp 's nice sample code, I took it and modified a bit to be more direct.
defmodule Parse2 do
def data(), do: ~S"""
jhb team names:hawks,maulers,eagles,wolves
dbn team names:sqeaks,bunfighters
"""
def stream_string(text) do
{:ok, io} = StringIO.open(text)
IO.stream(io, :line)
end
def create_index_name(name) do
":" <> String.replace(name, " ", "_")
end
def line_to_kv(line) do
[key | names] =
line
|> String.trim()
|> String.downcase()
|> String.split([":", ","])
{create_index_name(key), names}
end
def test2() do
# Replace first two lines with your file reading code.
data()
|> stream_string()
|> Map.new(&line_to_kv/1)
end
end


















