Die Datei wird nicht alle Daten ausgelesen

Xching

Erfahrenes Mitglied
Hallo, ich habe eine Methode geschrieben, damit jeweils Daten miteinander aus einem Datei vergleichen, wenn beide Daten gleich sind fügen in der Liste ein und mein Problem ist , ich kann nur eine beide erste Daten in Liste einfügen und der Rest nicht. ich weiß es nicht warum und ich möchte gern nur mit Iterator machen nicht mit .lenght() oder .size() machen.

Java:
public static List<List<Kunde>> getEqualsKunden(List<Kunde> kunden) {
		List<List<Kunde>> gleichkund = new ArrayList<>();

		int l = 0;
	        for (Iterator<Kunde> i = kunden.iterator(); i.hasNext();) {

				 Kunde k1 = i.next();
		 for (Iterator<Kunde> j = kunden.iterator(); j.hasNext();) {
				 Kunde k2 = j.next();

				if (k1==k2) {
					List<Kunde> liste = new ArrayList<>();
					liste.add(0, k1);
					liste.add(1, k2);
					gleichkund.add(l, liste);
					l++;

				}

			}
		}

		return gleichkund;

	}
 
Ich verstehe den Sinn der Methode nicht, wieso vergleichst du "kunden" mit sich selbst? Ich würde also davon ausgehen, dass du eigentlich zwei Listen als Parameter brauchst...

Desweiteren benötigst du keine 2 Schleifen, nimm einfach die kleinere von beiden Listen, iteriere über diese und verwende contains() um zu überprüfen, ob das Objekt in der 2. Liste ist.

Der == Operator ist bei Objekten nicht gut, verwende besser o1.equals(o2).

Für das iterien kannst du übrigens auch schreiben:
Java:
for(Kunde k:kunden) {}
 
Zuletzt bearbeitet:
Hallo Xching!

Wenn Du bereits eine Liste von Objekten hast, brauchst Du nur die Methode contains vom List-Interface aufzurufen.

Du musst allerding die hashCode- und equals-Methoden in Deinem Kunden-Objekt überschreiben.

Der Vergleichsoperator (==) bei Objekten zeigt Dir nur ob beide Objekte auf die selbe Referenz zeigen, also die selbe Instanz von Kunde. Der Vergleichsoperator sagt Dir aber zB nicht, ob die Objekte "gleich" sind.

Folgendes Beispiel liefert als Ausgabe zB "false":

Java:
		String s1 = new String("Name");
		String s2 = new String("Name");
		System.out.println(s1 == s2);

Es gibt zwei String-Objekte mit den selben Daten, aber die Variablen s1 und s2 zeigen auf unterschiedliche String-Objekte.

Ob sich Objekte gleichen wird über die equals-Methode die jedes Objekt von der Klasse (java.lang.Object) erbt bestimmt.

In Deinem Fall musst Du also für Dein Kunde-Objekt die equals-Methode sinnvoll implementieren. Außerdem solltest Du auch die hashCode-Funktion überschreiben. Die Regel lautet, wenn zwei Objekte gleich sind (equals liefert true), sollte auch die hashCode-Methode den selben Wert liefern.

Ich würde Dir die Klassen EqualsBuilder und HashCodeBuilder vom Projekt Apache Commons Lang empfehlen. Damit kannst Du die Methoden einfach implementieren.
 
Zuletzt bearbeitet von einem Moderator:
Zurück