Durch die Kombination meiner ursprünglichen Idee und Ihrer Antworten gelangte ich zu der Lösung für meine eigene Frage:
public ProducerDTO findAndRemove(String pod) {
ProducerDTO p = null;
try {
p = IntStream.range(0, producersProcedureActive.size())
.filter(i -> producersProcedureActive.get(i).getPod().equals(pod))
.boxed()
.findFirst()
.map(i -> producersProcedureActive.remove((int)i))
.get();
logger.debug(p);
} catch (NoSuchElementException e) {
logger.error("No producer found with POD [" + pod + "]");
}
return p;
}
Damit können Sie das Objekt entfernen, indem Sie remove(int)
die Liste nicht erneut durchlaufen (wie von @Tunaki vorgeschlagen) und das entfernte Objekt an den Funktionsaufrufer zurückgeben.
Ich habe Ihre Antworten gelesen, die mir vorschlagen, sichere Methoden wie ifPresent
anstelle von zu wählenget
aber ich finde keine Möglichkeit, sie in diesem Szenario zu verwenden.
Gibt es einen wichtigen Nachteil bei dieser Art von Lösung?
Bearbeiten Sie die folgenden @ Holger-Ratschläge
Dies sollte die Funktion sein, die ich brauchte
public ProducerDTO findAndRemove(String pod) {
return IntStream.range(0, producersProcedureActive.size())
.filter(i -> producersProcedureActive.get(i).getPod().equals(pod))
.boxed()
.findFirst()
.map(i -> producersProcedureActive.remove((int)i))
.orElseGet(() -> {
logger.error("No producer found with POD [" + pod + "]");
return null;
});
}