Also, perhaps this is a better example for mapping over arbitrary iterables:
julia> i = Iterators.filter(iseven, 1:20)
Base.Iterators.Filter{typeof(iseven), UnitRange{Int64}}(iseven, 1:20)
julia> map(println, i)
2
4
6
8
10
12
14
16
18
20
10-element Vector{Nothing}:
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
nothing
As you can see, map returns a collection of the return values, even for arbitrary iterables. For some functions like println, that’s probably not what you want though, since it (needlessly) ends up allocating a Vector full of nothing.