The challenge here is that there is no, current, reification of a pattern 
application, so all it boils down to at this point is: given a Predicate for 
some type T, make a cast to some unrelated type R.

For Class-based retention of elements, it is possible to do the equivalent of 
testing Class::isInstance(element) and then push the element downstream after a 
Class::cast(element)

Cheers,
√


Viktor Klang
Software Architect, Java Platform Group
Oracle
________________________________
From: core-libs-dev <core-libs-dev-r...@openjdk.org> on behalf of Nir Lisker 
<nlis...@gmail.com>
Sent: Saturday, 26 April 2025 20:55
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