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

Reply via email to