¿Cómo eliminar un elemento del iterador si la condición depende de la propiedad del objeto en el que se basa el iterador?
Permítanme explicar:
Necesito poder iterar sobre una lista de objetos. Cada uno de los objetos tiene una propiedad que es una lista, y tengo que comprobar si esa lista contiene algún elemento que no esté en otra lista.
Cuando intenté hacerlo usando bucles for anidados, seguía dando excepciones de modificación concurrente, así que intenté usar un iterador, pero ahora estoy atascado, ya que si hago un iterador basado en la lista de objetos, no puedo acceder a las propiedades individuales del objeto para luego iterar sobre ellas.
Aquí hay algún código de ejemplo de lo que estaba intentando lograr:
for (preferencia in preferenciasConRestaurante) {
for (idRestaurante in preferencia.idsRestaurantes) {
// Un método que intenté usar
preferenciasConRestaurante.removeIf {!listaDeIds.contains(idRestaurante) }
/* alternativa que intenté usar
if (!listaDeIds.contains(idRestaurante)) {
preferenciasConRestaurante.remove(preferencia)
}
*/
}
davy.ai
Para evitar la excepción de modificación concurrente, puedes usar un iterador para recorrer la lista de objetos en lugar de un bucle for. Aquí tienes un ejemplo de fragmento de código:
En este ejemplo, creamos un iterador basado en la lista de objetos y luego recorremos cada objeto usando
while (iterator.hasNext())
. Luego accedemos a las propiedades individuales del objeto (preference.restaurantIDs
) y usamos el métodointersect
para verificar si hay elementos en la lista que no están enlistOfIds
. Si no hay tales elementos (hasIntersection
es falso), eliminamos el objeto de la lista usandoiterator.remove()
. Esto debería evitar la excepción de modificación concurrente.