Hello David, testing the gatherer api, I also wanted a "window" operation as the one you are describing.
My use cases is a text file with some sections containing items organized like this :section1 item1 item2 item3 :section2 item1 item2 ... For me the signature of such method, windowGroupBy??, should take a Predicate (is a section, so the reverse of what you are suggesting) and a function that take a value (for which the predicate is true) and return a Collector, so I can write something like record Section(String name, List<String> items) {} String input = ... List<Section> sections = input.lines() .gather(Gatherers.windowGroupBy(line -> line.startsWith(":"), name -> Collectors. collectingAndThen (Collectors.toList(), list -> new Section(name.substring(1), list)))) .toList(); regards, Rémi > From: "David Alayachew" <davidalayac...@gmail.com> > To: "core-libs-dev" <core-libs-dev@openjdk.org> > Sent: Wednesday, January 10, 2024 7:19:26 AM > Subject: Re: Gatherers -- conditionalWindowFixed? > And this may also be better named as a split method instead of the long > conditionalWindowFixed. > On Wed, Jan 10, 2024 at 1:17 AM David Alayachew < [ > mailto:davidalayac...@gmail.com | davidalayac...@gmail.com ] > wrote: >> Oh, I made a mistake. Let me try it again. >> If the predicate is true, add the element to the current list (create list >> prior >> if needed). Else if the predicate is false, send the list down to the stream, >> then add the element to a new list (the new current list, if you will). >> On Wed, Jan 10, 2024 at 1:05 AM David Alayachew < [ >> mailto:davidalayac...@gmail.com | davidalayac...@gmail.com ] > wrote: >>> Hello Core Libs Dev Team, >>> I have been reading through JEP 461 ( [ https://openjdk.org/jeps/461 | >>> https://openjdk.org/jeps/461 ] ) about Gatherers, and I'm really excited for >>> what this will enable for us. >>> By far, the most important functionality that this API facilitates is the >>> ability to create windows. Anytime I needed a window, I was basically >>> forced to >>> use a for loop. Now, the 2 most common window cases are being handed to us >>> for >>> free. It is very much appreciated. >>> Could we add one more method for a conditionalWindowFixed? We would need to >>> pass >>> in some Predicate<T>. If the predicate returns true, create a list (if it >>> does >>> not already exist) then add the element to it. If the predicate returns >>> false >>> while the list is empty, then just move along to the next. Else if the >>> predicate returns false while the list is non empty, pass the list down into >>> the stream. So, you end up with Stream<T> -----> Stream<List<T>>. >>> The reason I think this is worth adding is because it facilitates a really >>> common use case. We may not want all windows to be the same size. >>> Is this something worth adding to the Gatherers API? >>> Thank you for your time and help! >>> David Alayachew