Prüfen ob Objekt in Liste enthalten ist

Status
Nicht offen für weitere Antworten.

nenico84

Mitglied
Hallo,

Vielleicht steh ich auch auf m Schlauch, aber nachdem ich die Erläuterungen zu "Comparator" nicht ganz verstanden hab, hier meine Frage:

Ich möchte eine Liste füllen, aber vorher prüfen lassen, ob das objekt, das ich hinzufügen will bereits in der Liste enthalten ist. Eigentlich echt simpel, aber irgendwie macht er's nicht! Ich lese aus einem ResultSet aus. Demnach sieht die while-Schleife bspw. folgendermaßen aus:

Code:
versionen = new ArrayList();
SelectItem item = new SelectItem("alle", "Alle Versionen");
versionen.add(item);

... dann kommt ein DB-Zugriff, der mir einen ResultSet ausgibt (rs). Diesen will ich nun teilweise auf die List übertragen:

Code:
while(rs.next()){
    item = new SelectItem(rs.getString(1), "Version "+rs.getString(1));
    if(versionen.contains(item.getValue()) == false){
        versionen.add(item);
    }
}

Somit müsste er doch immer, wenn das Objekt in der Liste "versionen" vorhanden ist weitermachen ohne es hinzuzufügen, oder? Hab ich nen Denkfehler gemacht? So schreibt er nämlich immer ALLE objekte aus dem ResultSet rein...

Wär über Hilfe sehr dankbar!
 
S

SlaterB

Gast
was ist item.getValue()?
du prüfst die ganze Zeit, ob die Values drin sind, fügst dann aber die Items ein,
das passt doch nicht
 

nebulo

Bekanntes Mitglied
Hallo,

contains(...) liefert nur true wenn du auf eine Referenz prüfst die auf das identische Objekt zeigt.

Mir scheint aber du machst folgendes:

Du liest Daten aus der DB und erstellst aus den Daten ein Objekt und fügst dieses der Liste hinzu.

Später liest du dann wieder die Daten und erstellst ein Objekt. Diese Objekt ist aber auf keinen Fall in der Liste. Es gibt zwar ein Objekt mit den gleichen Daten aber nicht das gleiche Objekt.

Vielleicht solltest du eine HashTable nehmen und dort nimmst du einfach den Primärschlüssel der DB als Schlüssel in der HashTable. Dann kannst du einfach prüfen ob die Daten schon vorhanden sind.

Gruß nebulo
 

Wildcard

Top Contributor
nebulo hat gesagt.:
contains(...) liefert nur true wenn du auf eine Referenz prüfst die auf das identische Objekt zeigt.
Das ist nicht korrekt.
Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e)).
Die Objekte müssen nicht identisch, sondern gleich sein.
 

nebulo

Bekanntes Mitglied
Ok das ist sicher präziser! Aber trotzdem sind zwei Instanzen einer Klasse die mit den gleichen Daten "befüllt" sind nicht gleich.
 

Wildcard

Top Contributor
Genau, aber je nach equals Implementierung eben gleich und nur darum geht es.

EDIT: Ich denke Slater hat das Problem bereits erkannt.
Wenn es nicht daran liegt, ist vermutlich equals/hashcode falsch Implementiert.
Übrigens, wenn die Reihenfolge nicht relevant ist, nimm stattdessen ein HashSet und spar dir das contains.
 

nenico84

Mitglied
Wildcard hat gesagt.:
Ich denke Slater hat das Problem bereits erkannt.

...leider nicht, denn ich hab es auch schon mit
Code:
if(versionen.contains(item) == false)
versucht. Lief auch nicht.

Die Objekte müssen nicht identisch, sondern gleich sein.

...dann müsste er doch auch ein "gleiches" Objekt (-->Objekt mit dem "gleichen", nicht "demselben" Inhalt) erkennen oder nicht? "Equals" sagt doch nur, dass der String, den ich mit "contains" vergleiche dem in der Liste entsprechen muss? Falls das nicht funktioniert: Klappt das mit der HashTable? Da hab ich nicht wirklich viel Erfahrung damit...
 

Wildcard

Top Contributor
Es hängt davon ab welche Klassen den konkret involviert sind und wie du equals und hashcode implementiert hast.
 

NTB

Bekanntes Mitglied
nenico hast Du SlaterBs Posting verstanden? Du fügst "Item" in die Liste ein. Du prüfst aber, ob das Ergebnis aus "Item.getValue()" in der List enthalten ist. Du müsstest aber prüfen, ob "Item" enthalten ist.
 
S

SlaterB

Gast
NTB, hast Du nenicos Posting(s) verstanden?

er/ sie benutzt doch inzwischen
> if(versionen.contains(item) == false)
 

NTB

Bekanntes Mitglied
Ganz offensichtlich habe ich es nicht verstanden... :/

Disregard my last post please!

Keine Ahnung, was das für ein Gehirnfurz war. Tschuldigung.
 

nenico84

Mitglied
Auf Anfrage erklär ich's für alle nochmal bischen expliziter, vielleicht hilft das ja weiter...

Also, das sieht folgendermaßen aus... Ich möchte aus einer Tabelle, die viele Daten über verschiedene Versionsupdates enthält die Spalte "Version" herauslesen, um herauszufiltern, welche Versionen in der Tabelle enthalten sind. Die sind natürlich mehrfach enthalten, da es zu jeder Version etliche Datensätze gibt.

Ich möchte nun aber den User meiner Page (JSF) in einem OneSelectMenue eine Version aussuchen lassen und dazu übergeb ich eine Liste mit den Versionen (je einmal enthalten) an das OneSelectMenue, sodass dieses je nach Datenbestand dynamisch befüllt wird. Soweit klar?

Und deshalb möchte ich wenn ich den RS auslese jedesmal prüfen, ob die jeweilige Version bereits in der Liste enthalten ist und wenn ja soll er sie nicht mehr hinzufügen. Kriegs aber bisher nur so hin dass er die Liste entweder mit allen oder mit gar keinem Wert befüllt...

Danke für deine Mühe...
 

nenico84

Mitglied
Auf Anfrage erklär ich's für alle nochmal bischen expliziter, vielleicht hilft das ja weiter...

Also, das sieht folgendermaßen aus... Ich möchte aus einer Tabelle, die viele Daten über verschiedene Versionsupdates enthält die Spalte "Version" herauslesen, um herauszufiltern, welche Versionen in der Tabelle enthalten sind. Die sind natürlich mehrfach enthalten, da es zu jeder Version etliche Datensätze gibt.

Ich möchte nun aber den User meiner Page (JSF) in einem OneSelectMenue eine Version aussuchen lassen und dazu übergeb ich eine Liste mit den Versionen (je einmal enthalten) an das OneSelectMenue, sodass dieses je nach Datenbestand dynamisch befüllt wird. Soweit klar?

Und deshalb möchte ich wenn ich den RS auslese jedesmal prüfen, ob die jeweilige Version bereits in der Liste enthalten ist und wenn ja soll er sie nicht mehr hinzufügen. Kriegs aber bisher nur so hin dass er die Liste entweder mit allen oder mit gar keinem Wert befüllt...

Danke für die Mühe...
 
S

SlaterB

Gast
wichtig ist im Moment allein, wie die equals-Operation von item aussieht,

wenn du gar nicht weißt, was das ist, dann hast du sie wahrscheinlich nicht überschrieben,
dann ist ein Objekt nur mit sich selber gleich,

du brauchst
public boolean equals(Object other) {
// auf Item casten, eigenen Namen mit dem des anderen Objekts mit equals vergleichen oder ähnliches
// return true oder false
}
 

NTB

Bekanntes Mitglied
äh... ist es da nicht schlauer, gleich die Datenbankabfrage anzupassen?
Du machst doch sowas wie "SELECT version FROM tabelle", richtig? Dabei kommen verschiedene Versionen raus, Du willst aber jeweils nur eine haben. So habe ich das jetzt verstanden.
Dazu machst Du einfach ein distinctes Query: "SELECT DISTINCT version FROM tabelle".
 

nenico84

Mitglied
AAAAAAAAAAhhhhhhhhhhhhhh, stimmt, da war doch was!!!!!!! Hab ich gar nicht mehr dran gedacht! Oder ich kann sie ja auch gruppieren (GROUP BY) oder? Stimmt, so wär's wohl um einiges einfacher!!! Danke, ich geb bescheid, wenn's geklappt hat...
 

nenico84

Mitglied
Ich muss mich entschuldigen für die ganzen Überlegungen, die ihr alle anstellen musstet!!!!!!! Das einfache Wörtchen "DISTINCT" hat gereicht um mein Problem zu lösen... Manchmal ist die Lösung SO einfach und man kommt eben trotzdem nicht drauf!!!

Falls ich allerdings mal nicht auf SQL zurückgreifen kann, werde ich euren Rat mit der Hash-Tabelle befolgen. Vielen Dank nochmal...
 

NTB

Bekanntes Mitglied
Puh, da bin ich ja froh, doch noch etwas sinnvolles in den Thread gepostet zu haben.
ABER:
Nimm es Dir selbst auch als Lehre, das nächste Mal ruhig das Problem entsprechend umfassend zu beschreiben! Hättest Du von Anfang an so beschrieben, was Du vor hast, wäre bestimmt schon früher jemand auf den Tip mit Distinct gekommen!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
OnDemand Prüfen ob Bild defekt ist Allgemeine Java-Themen 4
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
W Classpath Reflexion - Prüfen ob man auf ein Feld ändern kann Allgemeine Java-Themen 2
OnDemand Bild prüfen ob defekt Allgemeine Java-Themen 3
B Java Mail: Prüfen, ob Email hat ein Anhang oder nicht Allgemeine Java-Themen 2
Bluedaishi Prüfen ob Datei noch geöffnet ist Allgemeine Java-Themen 59
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
J Mit Lombok Integer Range prüfen Allgemeine Java-Themen 6
S Prüfen ob Textfile existiert Allgemeine Java-Themen 9
E Programm auf Installation prüfen Allgemeine Java-Themen 1
S Binärbaum prüfen Allgemeine Java-Themen 0
L String auf zahlenwert prüfen Allgemeine Java-Themen 13
W Datum prüfen + zweistellig Allgemeine Java-Themen 11
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
Z Java Exceptions - Auf leeres Feld prüfen Allgemeine Java-Themen 10
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
M .jar nach Datei prüfen Allgemeine Java-Themen 2
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
F Cardlayout prüfen ob schon vorhanden, keine doppelten Allgemeine Java-Themen 3
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
K Methoden Arrays auf true Werte prüfen Allgemeine Java-Themen 4
Y Prüfen ob ein Graph immer einen von mehren Enden erreicht Allgemeine Java-Themen 4
O Prüfen ob String eine Zahl mit maximal 2 Nachkommastellen ist Allgemeine Java-Themen 4
M datei aufruf prüfen Allgemeine Java-Themen 9
D Best Practice Prüfen ob jar nachträglich geändert wurde Allgemeine Java-Themen 2
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
H String auf Zahlen prüfen Allgemeine Java-Themen 4
T auf Valides Datum prüfen Allgemeine Java-Themen 12
N Java Version Prüfen lassen Allgemeine Java-Themen 11
S Variablen Prüfen ob Number vom Typ Integer, Float, Double, ... ist Allgemeine Java-Themen 2
E selber Klassen kompilieren/ prüfen Allgemeine Java-Themen 5
O Variablen Originalname einer übergebenen Variable prüfen Allgemeine Java-Themen 9
T Methoden Zahlenpalindrom laufzeitoptimiert prüfen Allgemeine Java-Themen 4
U ResourceBundles auf vollständigkeit prüfen Allgemeine Java-Themen 2
C jollyday: prüfen, ob Datum = Feiertag Allgemeine Java-Themen 8
C Prüfen ob sich ein Punkt innerhalb einer Kugel befindet (Java3D,nicht-lineare GLS) Allgemeine Java-Themen 5
E Prüfen ob Fenster mit Namen offen ist Allgemeine Java-Themen 2
M Binärbaum auf vollständigkeit prüfen Allgemeine Java-Themen 4
S Mail Adressen Syntax prüfen Allgemeine Java-Themen 22
O Text mit Wildcard gegen regulären Ausdruck prüfen Allgemeine Java-Themen 3
N List auf null prüfen Allgemeine Java-Themen 2
B generischen Typ prüfen Allgemeine Java-Themen 7
D prüfen, ob Enums bestimmte Elemente enthalten Allgemeine Java-Themen 3
N Prüfen ob Methode ausgeführt wird und diese ggf. abbrechen? Allgemeine Java-Themen 8
B Prüfen ob ein Programm gestartet wurde Allgemeine Java-Themen 23
N ArrayList nach Reihenfolge prüfen Allgemeine Java-Themen 2
C Prüfen auf Zahl und 6 stellig fehlerhaft? warum? Allgemeine Java-Themen 7
D Wie prüfen, ob ein String Teil eines Enum Types ist? Allgemeine Java-Themen 12
H Prüfen, ob doppete Werte in int-Array vorhanden sind Allgemeine Java-Themen 16
data89 Bilder mit Java prüfen - suche dringend Hilfe Allgemeine Java-Themen 8
S Prüfen auf Hex-Wert fester Länge! Allgemeine Java-Themen 5
M Prüfen, welche anderen Programme laufen Allgemeine Java-Themen 5
K Zip dateien prüfen Allgemeine Java-Themen 3
G ZIP Archiv auf Konsistenz prüfen Allgemeine Java-Themen 2
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
L Passwort mit Regulärem Ausdruck prüfen Allgemeine Java-Themen 6
P Sound Buffer prüfen Allgemeine Java-Themen 12
B PrintService - Wie prüfen ob Drucker online ist? Allgemeine Java-Themen 2
A Textfeld prüfen, ob ein Punkt eingegeben wurde Allgemeine Java-Themen 8
flashfactor Prüfen ob bereits eine Instanz gestartet ist Allgemeine Java-Themen 2
C Prüfen, ob eine Methode eine andere überschreibt! WIE? Allgemeine Java-Themen 8
T Prüfen, ob Char ein Quantifier ist Allgemeine Java-Themen 6
G Prüfen welche JRE-Version gebraucht wird Allgemeine Java-Themen 19
J Mit Patternmatching einen Satz prüfen Allgemeine Java-Themen 12
G Prüfen ob Ziffern einer Zahl pandigital sind? Allgemeine Java-Themen 15
M Prüfen ob Variable vorhanden / initalisiert ist Allgemeine Java-Themen 4
J Wie prüfen ob eine Datei vom OS fertig geschrieben wurde? Allgemeine Java-Themen 6
TheJavaKid Zeile auf existenz von String prüfen. Allgemeine Java-Themen 19
A Weshalb man Parameter auf Gültigkeit prüfen sollte Allgemeine Java-Themen 6
N Prüfen ob ein String in einen Integer umgewandelt werden kan Allgemeine Java-Themen 4
O String auf zahlen prüfen (java 1.3) Allgemeine Java-Themen 4
G Datei Zugriffsrechte prüfen Allgemeine Java-Themen 2
Linad Bilder auf Gleichheit prüfen Allgemeine Java-Themen 6
G ResultSet auf Inhalt prüfen? Allgemeine Java-Themen 2
H Prüfen, ob es sich um ein Integer handelt Allgemeine Java-Themen 4
C String str prüfen Allgemeine Java-Themen 3
H Prüfen ob ein String grösser als 4 Zeichen ist Allgemeine Java-Themen 3
F Prüfen, ob Windows oder UNIX Allgemeine Java-Themen 2
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben