Methods removeFirstIf in Collection and skipFirst in Stream

Alberto Otero Rodríguez albest512 at hotmail.com
Fri Jul 2 19:10:54 UTC 2021


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 <amaembo at gmail.com>
Enviado: viernes, 2 de julio de 2021 19:59
Para: Alberto Otero Rodríguez <albest512 at hotmail.com>
Cc: core-libs-dev <core-libs-dev at 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 <albest512 at hotmail.com<mailto:albest512 at 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 at openjdk.java.net<mailto:core-libs-dev at openjdk.java.net> <core-libs-dev at openjdk.java.net<mailto:core-libs-dev at 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.


More information about the core-libs-dev mailing list