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