ich versuche gerade eine TableView mit Objektwerten zu füllen, was auch momentan klappt.
Ich möchte das selektierte Objekt in eine ListView transportieren. Diese Funktion klappt auch.
Nun möchte ich prüfen, ob sich das Objekt noch ein weiteres mal in der ListView befindet.
Meine momentane Methode prüft leider nur das letzte hinzugefügte Element und nicht die komplette Liste.
Ich finde dazu auch nur die contains-Methode. Wie kann ich anderweitig prüfen, ob sich das gleiche Objekt mehrmals in der Liste befindet?
Die contains Methode ist schon richtig, allerdings gibt es Hilfsklassen, welche deine Arbeit erleichtern (intern greifen deren Methoden auch auf "contains" zu).
Erstelle ein Set. Wenn du nur wissen willst, ob irgendein Objekt öfter als ein mal vorkommt, dann füge einfach die gesamte Liste dem Set hinzu und prüfe im Anschluss die Länge der Liste und des Sets. Falls dies der Fall ist, wird das Set kürzer sein.
Wenn du wissen willst, welches Element doppelt oder öfters vorhanden ist, dann füge die Elemente der Liste einzeln dem Set hinzu und prüfe, ob der Rückgabewert "true" ist. Ist er "false", so war das Element schon im Set vorhanden und ist somit doppelt oder öfters in der Liste vorhanden.
Wenn du wissen willst, welches Element wie oft vorhanden ist, dann musst du mit einer Map arbeiten.
Auch wenn ich equals überschreibe, will es nicht funktionieren.
Ich stelle euch mal die gesamte Klasse zur Verfügung.
Vielleicht ist es besser nachzuvollziehen wie ich die gesamte Aufgabe gelöst habe.
Ich programmiere mit dem MVP-Pattern (ähnlich zu MVC).
[CODE lang="java" title="Objekt-Klasse"]public class Land
{
private SimpleIntegerProperty vorwahl;
private SimpleStringProperty land;
private SimpleStringProperty stadt;
private SimpleDoubleProperty einwohner;
private SimpleDoubleProperty flache;
public Land(int v, String l, String e, double einw, double f)
{
this.vorwahl = new SimpleIntegerProperty(v);
this.land = new SimpleStringProperty(l);
this.stadt = new SimpleStringProperty(e);
this.einwohner = new SimpleDoubleProperty(einw);
this.flache = new SimpleDoubleProperty(f);
}
public SimpleIntegerProperty getVorwahl()
{
return vorwahl;
}
public SimpleStringProperty getLand()
{
return land;
}
public SimpleStringProperty getStadt()
{
return stadt;
}
public SimpleDoubleProperty getEinwohner()
{
return einwohner;
}
public SimpleDoubleProperty getFlache()
{
return flache;
}
public int hashCode()
{
return land.hashCode();
}
@Override
public boolean equals(Object o)
{
if (o instanceof Land)
{
Land l = (Land) o;
return this.land.equals(l.getLand());
}
else
return false;
}
publicclassMainextendsApplication{@Overridepublicvoidstart(Stage stage)throwsException{Model m =newModel();Presenter p =newPresenter(m);View v =newView(p);
v.init();
p.setView(v);
stage.setScene(newScene(v.getPane(),850,450));
stage.setTitle("VorwahlListe");
stage.show();}publicstaticvoidmain(String[] args){launch();}}
Ich habe es mit einer weiteren HashMap ausprobiert und das hat auch geklappt.
Im Model habe ich die Liste pushingList in eine eigene HashMap hinzugefügt und habe die Objekte die doppelt in der HashMap vorkommen mit contains verglichen.