Didn't Brian or one of the Amber folks say that we might (some time in the
near future) get a .match() method on streams, which can take in a pattern?
It's the pattern version of .map().

On Sat, Apr 26, 2025 at 3:13 PM Chen Liang <chen.l.li...@oracle.com> wrote:

> Hi Nir, I think currently the most similar code pattern in stream that
> enjoys a good performance is:
>
> .<MyClass>mapMulti((x, sink) -> {
>     if (x instanceof MyClass myClass) {
>         sink.accept(myClass);
>     }
> })
>
> From the language point of view, such pattern-match-and-map-0/1 operations
> may be common.
> That said, can we provide a language feature in the future to convert a
> pattern declaration to BiConsumer<T, XxxConsumer<args>>? I believe that is
> a better way to address the question you have raised here.
>
> Regards,
> Chen Liang
> ------------------------------
> *From:* core-libs-dev <core-libs-dev-r...@openjdk.org> on behalf of Nir
> Lisker <nlis...@gmail.com>
> *Sent:* Saturday, April 26, 2025 1:55 PM
> *To:* core-libs-dev@openjdk.org <core-libs-dev@openjdk.org>
> *Subject:* Casting gatherer
>
> Hi,
>
> instanceof has been refitted to include an auto-cast ("pattern matching on
> instanceof"). Unfortunately, doing this as an intermediate operation on a
> stream requires first to filter via instanceof and then map via a cast.
> This is because
>
>     x instanceof MyClass myClass
>
> returns a boolean, not myClass.
>
> I've asked for an easier way of doing it long ago directly on Stream and
> was declined, but now with Gatherers I'm bringing this up again. I think it
> would be reasonable to put such an operation in the Gatherers class. I
> imagine that many Gatherer libraries, or utility classes, will include it
> since it's a common operation, and having it in the JDK means that it'll be
> done the best way possible (you can optimize where others can't, if
> applicable here).
>
> -- Nir
>

Reply via email to