ArrayListen - Vergleich

AvS

Erfahrenes Mitglied
Hi,

ich habe zwei ArrayListen, die gegeneinander verglichen werden sollen. An sich funktioniert meine Methode
Java:
public void removeNames() {
		for(String name : personList) {
			int tagIndex = 0;
			for(Tag tag : tagpool) {
				String tagname = tag.getName().trim();
			if(name.contains(tagname)) 
				{
				tagpool.remove(tagIndex);
					break;
				}
			if(tagname.equalsIgnoreCase(name))
				{
				tagpool.remove(tagIndex);
					break;
				}
			tagIndex++;
			}
		}
	}
Aber ich habe das Problem bspw. in der personList ein String "Peter" und in der tagpool-Liste "Peter" und "peter", nur einer der beiden Tags gelöscht wird.
 

fassy

Mitglied
Weil du mit dem break aus der Schleife springst., er findet "Peter", löscht "Peter" und springt mit dem break aus der Schleife.

Java:
	public void removeNames() {
		for (String name : personList) {
			int tagIndex = 0;
			for (Tag tag : tagpool) {
				String tagname = tag.getName().trim();
				if (name.contains(tagname)) {
					tagpool.remove(tagIndex);
					// break;
				}
				if (tagname.equalsIgnoreCase(name)) {
					tagpool.remove(tagIndex);
					break;
				}
				tagIndex++;
			}
		}
	}

funktioniert für einen tagpool mit zwei elementen "Peter" und "peter", allerdigns dann nicht mit "Peter","peter" und "peTer". Aber das größere Problem ist das du in der Schleife versuchst eine Objekt aus der Liste zu entfernen über die grade iteriert wird. Das ist nie eine gute Idee und funktioniert auch nicht. Probier es lieber so:

Java:
	public void removeNames() {
		List<Tag> matched = new ArrayList<Tag>();
		for (Tag tag : tagpool) {
			String tagname = tag.getName().trim();
			for (String name : personList) {
				if (tagname.equalsIgnoreCase(name)) {
					matched.add(tag);
					break;
				}
			}
		}
		for (Tag t : matched) {
			tagpool.remove(t);
		}
	}
}

Viele Grüße
f.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: AvS