Foro sobre Java SE > Borrar los elementos de un conjunto de listas
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) {
}
}
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
}
}
}
}
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()
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
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.
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.
}
}