Gatherers -- conditionalWindowFixed?

Remi Forax forax at univ-mlv.fr
Wed Jan 10 07:19:15 UTC 2024


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" <davidalayachew at gmail.com>
> To: "core-libs-dev" <core-libs-dev at 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:davidalayachew at gmail.com | davidalayachew at 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:davidalayachew at gmail.com | davidalayachew at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/core-libs-dev/attachments/20240110/6b7b38a9/attachment-0001.htm>


More information about the core-libs-dev mailing list