toString() Methode und ArrayList

josofa

Neues Mitglied
Hallo liebes Forum,

ich bin noch ziemlicher Java beginner und habe deshalb eine Frage an euch 🙂
Mein Problem: ich möchte eine aus einer ArrayList vom typ Komponent alle Einträge die keinen Eintrag haben, also leer sind herausfiltern bzw. löschen!

Ich habe das ganze nun mit einem Stringvergleich versucht, jedoch weiß ich nicht richtig, wie ich die toString() Methode für die ArrayList implementieren muss! --> Bei einer Ausgabe von irgendeinem Wert aus der Liste wird mir nur die Referenz geprintet! (adressbuch.components.Name@4c6dee26)

Java:
for (int i=0; i<list.size(); i++) {
            String s = list.get(i).toString();
            if(s == "") {
                list.remove(i);
            }
        }
Java:
public abstract class Komponent {
    
    
    protected String komponentenName;
    protected String komponentenWert;
    
    protected int komponentenPrio = 0;
    
    
    public static ArrayList<Komponent> availableComponents = new ArrayList<Komponent>(
            Arrays.asList(new Email("%"), new Geburtstag("%"), new Name("%")
            , new Notizen("%"), new Ort("%"), new Straße("%"), new Telefonnummer("%"), new Vorname("%"))
            );
    
    
    public Komponent(String komponentenWert)
    {
        this.setKomponentenWert((komponentenWert));
    }

    
    public String getKomponentenName() {
        return komponentenName;
    }

    public void setKomponentenName(String komponentenName) {
        this.komponentenName = komponentenName;
    }

    public String getKomponentenWert() {
        return komponentenWert;
    }

    public void setKomponentenWert(String komponentenWert) {
        this.komponentenWert = komponentenWert;
    }

    public int getKomponentenPrio() {
        return komponentenPrio;
    }

    public void setKomponentenPrio(int komponentenPrio) {
        this.komponentenPrio = komponentenPrio;
    }
    
    public static Komponent getKomponentByName(String name) throws NoSuchElementException
    {
        return Komponent.availableComponents.stream().filter(component -> component.komponentenName == name).findFirst().get();
    }
}

Hoffe ihr versteht mein Problem und könnt mir weiterhelfen!
Vielen Dank schonmal!
LG Josu
 
Zuletzt bearbeitet von einem Moderator:
Du musst dementsprechend die toString() Methode in deiner Klasse überschreiben überschreiben, sprich du musst in deiner Klasse Komponente toString() so überschreiben das diese dir den gewünschten Wert/String liefert, welchen du dann per equals(String s) vergleichen kannst.


z.B
Java:
class Komponent{


@Override
public String toString()     {return komponentenName;}
}

wenn du die Standardimplementierung der ArrayList verwendest, dann wird dir lediglich die Position im Speicher, als String geliefert.

Du könntest auch beigehen und entweder equals(Object o) selber impelentieren und oder das Interface Comparable implementieren.

dann kannst du mit einer for-Schleife über die Liste iterieren und so schon alle "leeren" Komponenten entfernen oder in eine andere Liste verschieben.

Java:
public class Test{
	
	public static void main(String[] args){
		
		
		ArrayList<Komponente> l = new ArrayList<>();
		
		String[] rdms = {"Adam","Moritz","Peter","","Max"};
		
		for (int i = 0; i < rdms.length; i++) {
			l.add(new Test().new Komponente(rdms[i]));
		}
		
		for (int i = 0; i < l.size(); i++) {
			if(l.get(i).toString().equals("")) {
				l.remove(i);
			}
			System.out.println(l.toString());
		}
		
	}
	
	
	class Komponente{
		
		private String name;
		
		public Komponente(String n){
			name = n;
		}
		
		@Override
		public String toString(){
			return name;
		}
	}
}

oder per equals(Object o)

Java:
@Override
		public boolean equals(Object o){
			if(o == null) {
				return false;
			}
			if(o instanceof String) {
				return name.equals(o);
			}
			return false;
		}

...

		for (int i = 0; i < l.size(); i++) {
			if(l.get(i).equals("")) {
				l.remove(i);
			}
		}

ich persönlich würde mir ja direkt eine Methode erstellen, die deine Liste bei Ausführung direkt von "leeren" Komponenten reinigt 😉
 
Zuletzt bearbeitet:

Zurück
Oben