Hmmm
Nope, sorry. These features aren’t missing, C# puts its expression monads in Linq so they’re reusable consistently. Having working generics makes stuff like that possible.
They’re not named the same thing as the Java stream operators, but it’s literally even the same code, an awaiting select to register the continuation, another non awaiting select to make the sequence blocking and project the result, a ToList to start the sequence and collect the values, and a foreach to iterate the results.
There’s also the parallel construct AsParallel that can make them all execute sinultaneously. And generators if you want to make it truly lazy and async all the way down.
If you really want to get serious with functional operators, load up ReactiveX; it provides flatmap, circuit breakers mergemaps, replay syndicators and all that jazz.
Aaaaaaand for SOA additions, there’s a Polly.net impl as well.
Aaaaaaand if you want a functional language comparable to Scala with Scalaz, try F#.
Come to the dark side. We have cake.