Hi David,
I think it would be easier to offer feedback if you could elaborate
where the point occurs where you feel the need to drop out of Streams
and into imperative code.
It is also worth noting that sometimes imperative code is the right
choice for maintainability, reviewability, performance and/or other reasons.
On 2025-11-11 04:36, David Alayachew wrote:
Hello @core-libs-dev <mailto:[email protected]>,
When working with streams, I often run into situations where I have to
"demote" back to imperative code because I am trying to solve a
problem best solved by recursion.
Consider the common use case of cycling through permutations to find
all permutations that satisfy some condition. With recursion, the
answer is incredibly simple -- just grab an element from the set, then
call the recursive method with a copy of the set minus the grabbed
element. Once you reach the empty set, you've reached your terminal
condition.
Use cases like that are not only incredibly common, but usually,
embarrassingly parallel. The example above of cycling through
permutations is only a few lines of imperative code, but I struggle to
imagine how I would do this with Streams.
I guess let me start by asking -- are there any good ways currently to
accomplish the above permutation example with Streams? And if not,
should there be?
Thank you for your time and consideration.
David Alayachew
--
Cheers,
√
Viktor Klang
Software Architect, Java Platform Group
Oracle