Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Borrar los elementos de un conjunto de listas

Hola,

Se os ocurre como puedo hacer esto:
Estoy saturado y no me doy cuenta de como hacerlo, por el tema de que es una colección de listas.

Collection<List> coleccionDeListas = mapaPrueba.values();
for( List lista_A :coleccionDeListas){
for(a elementA:lista_A){
//borramos de la lista
lista_A.remove(elementA); //Esto no se puede hacer, ya que se esta recorriendo la lista.
}
}

septiembre 14, 2013 | Unregistered CommenterAdrian

Publica un código completo, compilable y ejecutable, con una descripción detallada de lo que quieres conseguir.

public class Test {

public static void main(String[] args) {
}
}

septiembre 14, 2013 | Registered Commenterchoces

Lo que quiero es borrar el elemento de la lista, donde pongo que eso no se puede hacer...

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainPrueba {

public MainPrueba() {
super();
}

public class a {

private b elementob;

public a(b elementob) {
super();
this.elementob = elementob;
}

public b getElementob() {
return elementob;
}

public void setElementob(b elementob) {
this.elementob = elementob;
}
}

public class b {

Integer elemento = 2;

public b(int elemento) {
super();
this.elemento = elemento;
}

public int getElemento() {
return elemento;
}

public void setElemento(int elemento) {
this.elemento = elemento;
}
}

/**
* @param args
*/
public static void main(String[] args) {
MainPrueba mainPrueba = new MainPrueba();
b eleb1 = mainPrueba.new b(3);
b eleb2 = mainPrueba.new b(1);
b eleb3 = mainPrueba.new b(34);

a eleA = mainPrueba.new a(eleb1);
a elaA2 = mainPrueba.new a(eleb2);
a elaA3 = mainPrueba.new a(eleb3);

List listaA = new ArrayList();
listaA.add(eleA);
listaA.add(elaA2);
listaA.add(elaA3);

Map<Integer, List> mapaPrueba = new HashMap<Integer, List>();
mapaPrueba.put(1, listaA);

Collection<List> coleccionDeListas = mapaPrueba.values();
for( List lista_A :coleccionDeListas){
for(a elementA:lista_A){
//quitamos de la lista
lista_A.remove(elementA); //ESTO NO SE PUEDE HACER, ESTOY RECORRIENDO LA LISTA_A
}
}
}
}

septiembre 14, 2013 | Unregistered CommenterAdrian

Puedes hacerlo así, usando un ListIterator:

Collection<List<A>> coleccionDeListas = mapaPrueba.values();
for (Iterator<List<A>> itc = coleccionDeListas.iterator(); itc.hasNext();) {
List<A> lista_A = itc.next();
for (ListIterator<A> it = lista_A.listIterator(); it.hasNext();) {
A elementA = it.next();
//quitamos de la lista
lista_A.remove(elementA);
break;
}
}

puesto que remove solo se puede invocar una vez.

http://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html#remove()

septiembre 14, 2013 | Registered Commenterchoces

Hola,

ya, pero eso solo me borra el primer elemento, como hago para ke me borre todos los elementos, no hay ninguna forma de hacerlo?

gracias

septiembre 14, 2013 | Unregistered CommenterAdrian

Hubiésemos ahorrado mucho tiempo, si desde el principio hubieses detallado lo que querías lograr.

List<A> lista_A = itc.next();
lista_A .clear();

No hace falta usar un iterador para eliminar todos los elementos de una lista.

http://docs.oracle.com/javase/7/docs/api/java/util/List.html#clear()

El método remove se puede usar dentro de un iterador de una List, como has visto, para eliminar un elemento concreto dada una condición de búsqueda.
Si se desean eliminar varios elementos, lo mejor es crear una lista nueva, añadir los elementos que se quieren eliminar a esa nueva lista, dentro del iterador, y fuera del iterador usar un removeAll contra la lista original.

septiembre 14, 2013 | Registered Commenterchoces