I think that option A is best, and it leans towards findAllParallel, collectParallel etc...
Den tirs. 8. apr. 2025 kl. 00.55 skrev Paul King <pa...@asert.com.au>: > Hi folks, > > I have been looking at the functionality in Groovy-stream[1] and > Gatherers4J[2] lately with a view to filling any gaps in Groovy's > iterator DGM methods. I'm not trying to replicate everything they > contain, just looking for the most useful functionality Groovy might > be missing. > > The biggest missing pieces at this point in my mind are lazy (Iterator > return value) variants of findAll, collect, and collectMany. Groovy's > current variants are eager (return collections and lists). > Groovy-stream gets around this by adding stream-named variants: > filter, map, and flatMap. > > One option is to break backwards compatibility (Groovy 5 only). So > only for the versions of those methods which take an Iterator as > input, change the return type to be Iterator. Given how widely used > those methods are, I don't think that is an option for us. > > Actually, findAll currently doesn't have an Iterator variant, so we > could add that but it would still be a behavioral compatibility > breakage since the Object version is used for Iterators and it returns > a list. > > So, we could give up on lazy variants for those methods, but again > given how commonly used they are, that is a pretty big gap. > > So, the other option is to provide alternative names. The best to me seem: > > (A) findAllLazy, collectLazy, collectManyLazy > (B) findAllThen, collectThen, collectManyThen > (C) filter, map, flatMap > (D) something else? > > Option (C) is what Groovy-stream did and would be familiar to Java > Stream users but folks are going to ask, why can't I have that "alias" > for Iterables and arrays, but the intent here is just for the Iterator > variants. I think Lazy best conveys that. Use without "Lazy" for the > eager (think terminal operator) variant and with "Lazy" for the lazy > (think intermediate operator) variant. It also is easier to extend, > the fourth method in terms of gaps is collectEntries, which currently > returns a Map. An Iterator<Map.Entry> return value could be made for > collectEntriesLazy if we wanted. > > Note that many of our operators are terminal in nature, find, count*, > inject, etc, so this isn't about doing this for all operators > eventually. > > Thoughts? > > Paul. > > > [1] https://github.com/timyates/groovy-stream > [2] https://github.com/tginsberg/gatherers4j > -- Med venlig hilsen, Søren Berg Glasius Hedevej 1, Gl. Rye, 8680 Ry Mobile: +45 40 44 91 88 --- Press ESC once to quit - twice to save the changes.