On Wed, 27 Mar 2024 23:24:51 GMT, Marius Hanl <mh...@openjdk.org> wrote:

>>> In the java.util.stream package 
>>> [docs](https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/stream/package-summary.html#SideEffects)
>>>  it is mentioned that `forEach()` method operates only via side-effects. So 
>>> do you think we should avoid using `forEach()` here and iterate the 
>>> generated list separately to clear selected index?
>> 
>> `forEach` is used correctly here. From the docs:
>>> With the exception of terminal operations 
>>> [forEach](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/stream/Stream.html#forEach(java.util.function.Consumer))
>>>  and 
>>> [forEachOrdered](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/stream/Stream.html#forEachOrdered(java.util.function.Consumer)),
>>>  side-effects of behavioral parameters may not always be executed when the 
>>> stream implementation can optimize away the execution of behavioral 
>>> parameters without affecting the result of the computation.
>> 
>>> Another idea is to use `toList()`, which is a very efficient operation and 
>>> then iterate over it.
>> 
>> That's still 2 iterations. If the code is not performance-critical it 
>> doesn't matter.
>
>> That's still 2 iterations.
> 
> Yes, but one advantage here:
> We currently do `final List<Integer> removed = new 
> ArrayList<>(c.getRemovedSize());`, 
> where we allocate a list with a size, that is probably too big since we 
> filter the removed items.
> So with `toList`, we at least get back a list with the correct size.
> But true, that we technically iterate twice then. It probably does not matter 
> too much.

> `forEach` is used correctly here. From the docs:
> 
> > With the exception of terminal operations 
> > [forEach](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/stream/Stream.html#forEach(java.util.function.Consumer))
> >  and 
> > [forEachOrdered](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/stream/Stream.html#forEachOrdered(java.util.function.Consumer)),
> >  side-effects of behavioral parameters may not always be executed when the 
> > stream implementation can optimize away the execution of behavioral 
> > parameters without affecting the result of the computation.
> 

Thanks for pointing this out.

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/1430#discussion_r1542359758

Reply via email to