JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet

busgi

Aktives Mitglied
Hallo Zusammen,

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?



Java:
public boolean checkIfExist(List<Land> listViewList, Land l)
    {
        if (listViewList != null && listViewList.contains(l))
        {
            return true;
        }
        else
        {
            return false;
        }

    }
 

Neumi5694

Top Contributor
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.

Beachte: Das alles geht nicht für null-Werte.
 

busgi

Aktives Mitglied
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;
}

public String toString()
{
return "+" + vorwahl.get() + ", " + land.get() + ", " + stadt.get() + ", " + einwohner.get() + ", " + flache.get();
}

}[/CODE]

[CODE lang="java" title="Model"]public class Model
{
private Map<Integer, Land> landMap;

private int id;

private List<Land> list;

private List<Land> pushingList;

public Model()
{
landMap = new HashMap<>();
createIt();
}

public void createLand(int v, String l, String s, double einw, double f)
{
Land land = new Land(v, l, s, einw, f);
landMap.put(id, land);
id++;
}

public List<Land> addToList()
{
list = new ArrayList<Land>();
list.addAll(landMap.values());
return list;
}

public void addLand(Land l)
{
list.add(l);
}

public void removeLand(Land l)
{
list.remove(l);
}

public void schieben(Land l)
{
pushingList = new ArrayList<Land>();
pushingList.add(l);
}

public void check(Land l)
{
for (int i = 0; i < list.size(); i++)
{
if (list.retainAll(pushingList))
{
pushingList.remove(l);
}
}
}

public boolean checkIfExist(List<Land> listViewList, Land l)
{
if (listViewList != null && listViewList.contains(l))
{
return true;
}
else
{
return false;
}
}

public int getID()
{
return id++;
}

public List<Land> getPushingList()
{
return pushingList;
}

public void createIt()
{
createLand(+49, "Deutschland", "Berlin", 80000025, 435);
createLand(+90, "Türkei", "Ankara", 80462654, 907);
createLand(+32, "Belgien", "Brüssel", 3268766, 120);
createLand(+34, "Frankreich", "Paris", 50239822, 356);
createLand(+41, "Schweiz", "Bern", 10236559, 187);
createLand(+49, "Chile", "Santiago de Chile", 36745798, 658);
createLand(+81, "Japan", "Tokio", 56323564, 442);

}

}
[/CODE]

[CODE lang="java" title="Presenter"]public class Presenter
{

private View v;

private Model m;

public Presenter(Model m)
{
this.m = m;
}

public void setView(View v)
{
this.v = v;
}

public ObservableList<Land> getObsList()
{
ObservableList<Land> obs = FXCollections.observableArrayList();
obs.addAll(m.addToList());
return obs;
}

public void addLand(Land l)
{
m.addLand(l);
v.getItemToTable(l);
}

public void removeLand(Land l)
{
m.removeLand(l);
v.removeFromTable(l);
m.check(l);
v.removeFromListView(l);
}

public void pushingList(Land l)
{
m.schieben(l);
v.getPushingListToList(l);
}

public void checkifExcist(Land l)
{
if (m.getPushingList() != null && m.getPushingList().contains(l))
{
Alert a = new Alert(AlertType.WARNING);
a.setContentText("Land bereits vorhanden");
a.setHeaderText("Warnung");
a.showAndWait();
}
else
{
pushingList(l);
}
}
}
[/CODE]


In der View-Klasse habe ich ein Button, weches die Methode zum Prüfen der Liste triggert.

Java:
 public void getItemsToList(Land l)
    {
        l = table.getSelectionModel().getSelectedItem();
        p.checkifExcist(l);
    }


[CODE=java]public class View
{
    private Presenter p;

    private BorderPane pane;

    private TableView<Land> table;

    private ListView<Land> list;

    private Button schieben;

    private Stage addStage;

    private Button addButton;

    private Button removeButton;

    private HBox h;

    public View(Presenter p)
    {
        this.p = p;
        init();
    }

    public void init()
    {
        pane = new BorderPane();
        table = new TableView<Land>();
        list = new ListView<Land>();
        schieben = new Button("=>");
        schieben.setAlignment(Pos.CENTER);
        addButton = new Button("Land hinzufügen");
        removeButton = new Button("Land entfernen");
        h = new HBox();
        createColumns();

        schieben.setOnAction(e ->
        {
            getItemsToList(table.getSelectionModel().getSelectedItem());

        });

        addButton.setOnAction(e -> addStage(Modality.APPLICATION_MODAL));
        removeButton.setOnAction(e -> removeLand());

        getItemsToTable();

        h.getChildren().addAll(addButton, removeButton);
        h.setSpacing(5);
        h.setPadding(new Insets(10));

        pane.setLeft(table);
        pane.setRight(list);
        pane.setCenter(schieben);
        pane.setBottom(h);
    }

    public void createColumns()
    {

        TableColumn<Land, Number> vorwahlColumn = new TableColumn<Land, Number>("Vorwahl");
        TableColumn<Land, String> landColumn = new TableColumn<Land, String>("Land");
        TableColumn<Land, String> stadtColumn = new TableColumn<Land, String>("Stadt");
        TableColumn<Land, Number> einwohnerColumn = new TableColumn<Land, Number>("Einwohner");
        TableColumn<Land, Number> flacheColumn = new TableColumn<Land, Number>("Fläche");

        vorwahlColumn.setCellValueFactory(item -> item.getValue().getVorwahl());
        landColumn.setCellValueFactory(item -> item.getValue().getLand());
        stadtColumn.setCellValueFactory(item -> item.getValue().getStadt());
        einwohnerColumn.setCellValueFactory(item -> item.getValue().getEinwohner());
        flacheColumn.setCellValueFactory(item -> item.getValue().getFlache());

        table.getColumns().addAll(vorwahlColumn, landColumn, stadtColumn, einwohnerColumn, flacheColumn);
    }

    public void getItemsToTable()
    {
        table.getItems().setAll(p.getObsList());
    }

    public void getItemsToList(Land l)
    {
        l = table.getSelectionModel().getSelectedItem();
        p.checkifExcist(l);
    }

    public void getPushingListToList(Land l)
    {

        list.getItems().addAll(l);
    }

    public void getItemToTable(Land l)
    {
        table.getItems().addAll(l);
    }

    public void removeLand()
    {
        Land l = table.getSelectionModel().getSelectedItem();
        p.removeLand(l);
    }

    public void removeFromTable(Land l)
    {
        table.getItems().remove(l);
    }

    public void removeFromListView(Land l)
    {
        list.getItems().remove(l);
    }

    public BorderPane getPane()
    {
        return pane;
    }

    // Stage hinzufügen

    public void addStage(Modality modal)
    {
        addStage = new Stage();
        Scene scene = addStage();
        addStage.setScene(scene);
        addStage.setTitle("Land hinzufügen");
        addStage.show();
    }

    public Scene addStage()
    {
        GridPane grid = new GridPane();
        Label vorwahl = new Label("Vorwahl");
        Label land = new Label("Land");
        Label stadt = new Label("Stadt");
        Label einwohner = new Label("Einwohner");
        Label flache = new Label("Fläche");

        TextField textv = new TextField();
        TextField textl = new TextField();
        TextField texts = new TextField();
        TextField texte = new TextField();
        TextField textf = new TextField();

        Button add = new Button("Hinzufügen");

        add.setOnAction(e ->
        {
            Land l = new Land(Integer.valueOf(textv.getText()), textl.getText(), texts.getText(), Double.valueOf(texte.getText()), Double.valueOf(textf.getText()));
            p.addLand(l);

            textv.clear();
            textl.clear();
            texts.clear();
            texte.clear();
            textf.clear();

            addStage.close();
        });

        grid.addRow(0, vorwahl, textv);
        grid.addRow(1, land, textl);
        grid.addRow(2, stadt, texts);
        grid.addRow(3, einwohner, texte);
        grid.addRow(4, flache, textf);
        grid.addRow(5, new Label(), add);

        grid.setAlignment(Pos.CENTER);
        grid.setPadding(new Insets(10, 10, 10, 10));
        grid.setVgap(5);

        return new Scene(grid, 450, 250);

    }

}

Java:
public class Main extends Application
{

    @Override
    public void start(Stage stage) throws Exception
    {
        Model m = new Model();
        Presenter p = new Presenter(m);
        View v = new View(p);

        v.init();
        p.setView(v);

        stage.setScene(new Scene(v.getPane(), 850, 450));
        stage.setTitle("VorwahlListe");
        stage.show();

    }

    public static void main(String[] args)
    {
        launch();
    }

}
 

busgi

Aktives Mitglied
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.

Jetzt klappt es! :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Justin09 Strings prüfen AWT, Swing, JavaFX & SWT 4
S JavaFX TextField auf Datentyp prüfen AWT, Swing, JavaFX & SWT 1
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
I JavaFX TextField auf Eingabe prüfen AWT, Swing, JavaFX & SWT 3
J JavaFx/SceneBuilder/Felder beim verlassen prüfen AWT, Swing, JavaFX & SWT 1
M Swing JTable >> Eingaben prüfen => Empfehlungen? AWT, Swing, JavaFX & SWT 2
R Prüfen ob Form bereits geöffnet AWT, Swing, JavaFX & SWT 9
M JTable: Prüfen ob Zelle leer ist AWT, Swing, JavaFX & SWT 5
llabusch Prüfen ob JMenu leer ist & löschen AWT, Swing, JavaFX & SWT 1
F In Action Listener TextFields einlesen und prüfen. Abbruch bei falschen Eingaben. Wie mache ich das? AWT, Swing, JavaFX & SWT 2
U Swing JTextField zur Laufzeit auf Eingaben prüfen AWT, Swing, JavaFX & SWT 0
L Swing Gui auf Benutzerinteraktion prüfen AWT, Swing, JavaFX & SWT 7
T Prüfen ob 2 JLabel übereinander liegen. Performance Problem. AWT, Swing, JavaFX & SWT 5
N Methode zum Prüfen ob Jtextfield verändert worden ist AWT, Swing, JavaFX & SWT 2
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
P Vor Beenden änderungen prüfen AWT, Swing, JavaFX & SWT 2
S SWT Wie bei Widget Text auf int prüfen bei Eingabe AWT, Swing, JavaFX & SWT 5
A Prüfen, ob ein Float eingegeben wurde AWT, Swing, JavaFX & SWT 5
klattiator CardLayout - Cards auf Existenz prüfen AWT, Swing, JavaFX & SWT 3
A Datum prüfen AWT, Swing, JavaFX & SWT 11
M Prüfen, ob in einem Textfeld/Tabelle eine Eingabe erfolgt is AWT, Swing, JavaFX & SWT 11
G Prüfen ob ein Treepath existiert AWT, Swing, JavaFX & SWT 3
G eingegebene Werte einer JTable prüfen? Bitte helfen AWT, Swing, JavaFX & SWT 5
I Prüfen einer Eingabe in JTextField, Fokusverlust AWT, Swing, JavaFX & SWT 2
C JTextField Eingabe prüfen AWT, Swing, JavaFX & SWT 4
D Prüfen, ob Fenster bereits schon geöffnet ist AWT, Swing, JavaFX & SWT 1
G Inhalt von Textfeld prüfen AWT, Swing, JavaFX & SWT 10
W JTextField auf gültigkeit prüfen AWT, Swing, JavaFX & SWT 2
E Inhalt einer JComboBox aufgrund von Eintragungen prüfen,??? AWT, Swing, JavaFX & SWT 1
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
B mit maus Objekt bewegen AWT, Swing, JavaFX & SWT 3
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
U Was genau ist ein Shape-Objekt? AWT, Swing, JavaFX & SWT 3
DonBronson Objekt bewegen (Mausposition) AWT, Swing, JavaFX & SWT 3
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
C Objekt an paintComponent weitergeben AWT, Swing, JavaFX & SWT 1
M Swing Objekt Array in GUI ausgeben AWT, Swing, JavaFX & SWT 1
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
F Java FX Von der Fxml Datei zum Objekt AWT, Swing, JavaFX & SWT 8
M Swing Durch Usereingabe neues Objekt AWT, Swing, JavaFX & SWT 2
K Color-Objekt erzeugen in CMYK AWT, Swing, JavaFX & SWT 2
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
A Swing Null Pointer Exception obwohl Objekt initialisiert AWT, Swing, JavaFX & SWT 21
J gezeichnetes Objekt anklicken AWT, Swing, JavaFX & SWT 10
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
L JavaFX als eigenes Objekt AWT, Swing, JavaFX & SWT 3
M [JavaFX] Objekt um Zentrum rotieren (Camera) AWT, Swing, JavaFX & SWT 1
E JavaFx Screne mehr als ein "Objekt" zuordnen ? AWT, Swing, JavaFX & SWT 2
F 2D-Grafik Objekt durch Einwirkung einer Kraft im Raum bewegen AWT, Swing, JavaFX & SWT 14
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
B Event Handling MouseListener Behält seine Variablen, auch wenn ich ein neus Objekt erstelle AWT, Swing, JavaFX & SWT 2
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
R Array aus einem Objekt auslesen AWT, Swing, JavaFX & SWT 4
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
A AWT TTF-Datei zu Font-Objekt finden? AWT, Swing, JavaFX & SWT 5
S Objekt durch Tasteneingabe mehrmals drehen AWT, Swing, JavaFX & SWT 9
E Swing Objekt zu Position (Point) bewegen AWT, Swing, JavaFX & SWT 2
T 3D-Grafik (Java3D) Aus einem Objekt einer Szene (Würfel, Ebene) die wichtigen Randkoordinaten auslesen AWT, Swing, JavaFX & SWT 3
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
F Canvas Objekt außerhalb des Frames zeichnen AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
propra Schnittpunkt zwischen Objekt und Kante finden AWT, Swing, JavaFX & SWT 24
L Graphics Objekt - aus anderer Klasse aufrufen / übergeben AWT, Swing, JavaFX & SWT 5
S Objekt einmal laden zweimal anzeigen 3d AWT, Swing, JavaFX & SWT 6
I Swing Zugriff auf ein Objekt AWT, Swing, JavaFX & SWT 2
F Nur ein Objekt auf Canvas neu zeichnen AWT, Swing, JavaFX & SWT 4
R Möglichkeiten ein abgeleitetes Objekt zu erzeugen AWT, Swing, JavaFX & SWT 4
P Swing Wie bekomme ich eine Referenz auf ein Objekt das im EDT erzeugt wird? Und anderes... AWT, Swing, JavaFX & SWT 8
T Objekt in Kreisbahn bewegen AWT, Swing, JavaFX & SWT 5
B Zeichnen von Bildern auf JPanel aus eigenem Objekt AWT, Swing, JavaFX & SWT 19
V Parameter an Runnable-Objekt übergeben AWT, Swing, JavaFX & SWT 6
Dit_ Objekt mit ActionEvent übergeben AWT, Swing, JavaFX & SWT 2
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
A SWT SWT - Unbekannte Fläche (Objekt) erscheint im Composite AWT, Swing, JavaFX & SWT 6
D Objekt mit Button erstellen und mit anderem Button verwenden AWT, Swing, JavaFX & SWT 4
P Objekt kopieren AWT, Swing, JavaFX & SWT 2
M Graphics-Objekt aktualisiert sich nicht AWT, Swing, JavaFX & SWT 2
U [MVC] Objekt bearbeiten AWT, Swing, JavaFX & SWT 9
O Swing JTable Colum Objekt AWT, Swing, JavaFX & SWT 6
Dit_ Ein Kreis als Graphics2D oder als Ellipse2D Objekt AWT, Swing, JavaFX & SWT 19
M Objekt im ActionListener ansprechen AWT, Swing, JavaFX & SWT 3
C Wie komme ich an ein Objekt aus einem JTree? AWT, Swing, JavaFX & SWT 10
R FlowLayout: 1 Objekt pro Zeile AWT, Swing, JavaFX & SWT 5
D Objekt (Map) in Textfeld ausgeben AWT, Swing, JavaFX & SWT 10
kirchrath Swing Aus ActionEvent Objekt herausfinden auf dem er ausgeführt wurde AWT, Swing, JavaFX & SWT 4
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
S Objekt wird während Endlosschleife nur einmal bewegt AWT, Swing, JavaFX & SWT 2
W Objekt-array als Raster visualisieren AWT, Swing, JavaFX & SWT 3
F Herausfinden, auf welchem Objekt der Fokus liegt AWT, Swing, JavaFX & SWT 2
G Tooltip Text für ein Shape Objekt AWT, Swing, JavaFX & SWT 2
D DnD ganzer Objekte(Objekt erstellen) AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben