Hi,

In my case, I have a list of entities related to another entity. In that list 
obviously there weren't repeated entities (entities with the same id). And I 
have the id of an entity to be removed from that list.

So, I have the following alternatives which are pretty inefficient:

1) entityList.removeIf(entity -> entityIdToRemove.equals(entity.getId()));

2) entityList = entityList.stream()
                .filter(entity -> !entityIdToRemove.equals(entity.getId()))
                .collect(Collectors.toList());

And I have this other alternative which is too much code:

    Iterator<Entity> iterator = entityList.iterator();
    while (iterator.hasNext()) {
        Entity entity = iterator.next();
        if(entityIdToRemove.equals(entity.getId())) {
            itr.remove();
            break;
        }
    }

So, what I propose would be something like:

1) entityList.removeFirstIf(entity -> entityIdToRemove.equals(entity.getId()));

2) entityList = entityList.stream()
                .skipFirst(entity -> entityIdToRemove.equals(entity.getId()))
                .collect(Collectors.toList());

Regards,

Alberto.
________________________________
De: Tagir Valeev <amae...@gmail.com>
Enviado: viernes, 2 de julio de 2021 19:59
Para: Alberto Otero Rodríguez <albest...@hotmail.com>
Cc: core-libs-dev <core-libs-dev@openjdk.java.net>
Asunto: Re: Methods removeFirstIf in Collection and skipFirst in Stream

Hello!

It's unclear why one might need methods like this. Could you please provide any 
real life use cases when such methods could be useful? Thanks.

With best regards,
Tagir Valeev.

пт, 2 июл. 2021 г., 21:28 Alberto Otero Rodríguez 
<albest...@hotmail.com<mailto:albest...@hotmail.com>>:
Sorry for the links, the methods would be:

1) In Collection:
           default boolean removeFirstIf​(Predicate<? super 
E<https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/Collection.html>>
 filter)

2) In Stream:
           Stream<T> skipFirst(Predicate<? super 
T<https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/stream/Stream.html>>
 predicate)
________________________________
De: Alberto Otero Rodríguez
Enviado: viernes, 2 de julio de 2021 16:22
Para: core-libs-dev@openjdk.java.net<mailto:core-libs-dev@openjdk.java.net> 
<core-libs-dev@openjdk.java.net<mailto:core-libs-dev@openjdk.java.net>>
Asunto: Methods removeFirstIf in Collection and skipFirst in Stream

Hi,

I think it would be interesting adding the following methods:

1) In Collection:
           default boolean 
removeFirstIf​(Predicate<https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/function/Predicate.html><?
 super 
E<https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/Collection.html>>
 filter)

2) In Stream:
           
Stream<https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/stream/Stream.html><T<https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/stream/Stream.html>>
 
skipFirst(Predicate<https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/function/Predicate.html><?
 super 
T<https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/stream/Stream.html>>
 predicate)

The purpose of both methods would be the same. Deleting the first element in 
the collection that fulfills the predicate.

This could be useful in collections/streams with no duplicate elements where 
performance would be better than using removeIf from Collection of filter from 
Stream.

Regards,

Alberto.

Reply via email to