ObservableList<String>

Adriano10

Bekanntes Mitglied
Java:
ObservableList<String> users;

  @Subscribe
    public void updateUser(ChangeUserInfoSuccessfulResponse response){
        Platform.runLater(() ->{
            users.remove(response.getNewUserInfo().getOldUsername);
            users.add(response.getNewUserInfo().getNewUsername());
        });
    }
Ich wollte ObservableList aktualisieren, wie könnte das verfeinern, replace oder es irgendwelche Alternative gibt?
Vielen Dank im Voraus
 
G

Gelöschtes Mitglied 65838

Gast
überlass deinen objekten das jedes objekt kennt die Listeund dann kann jedes objekt users.remove(this)
 
K

kneitzel

Gast
Die Frage ist erst einmal, was Dir an dem Code nicht gefällt und was die genauen Anforderungen sind. Eine List hat Elemente ja in einer bestimmten Reihenfolge. Soll die erhalten bleiben? Oder soll die Reihenfolge explizit nicht erhalten bleiben?

List hat ja noch die Methode set. Du kannst also die Position des alten Username abfragen und dann an die Position den neuen schreiben.

Ansonsten ist das aber auch eine Design-Frage: Der Username scheint ja ein Element von UserInfo zu sein. Ggf. macht also eine ObservableList<UserInfo> oder so Sinn. Das ist aber etwas, das man so mit dem kleinen Einblick nicht sagen kann.
 

Adriano10

Bekanntes Mitglied
Die Frage ist erst einmal, was Dir an dem Code nicht gefällt und was die genauen Anforderungen sind. Eine List hat Elemente ja in einer bestimmten Reihenfolge. Soll die erhalten bleiben? Oder soll die Reihenfolge explizit nicht erhalten bleiben?

List hat ja noch die Methode set. Du kannst also die Position des alten Username abfragen und dann an die Position den neuen schreiben.

Ansonsten ist das aber auch eine Design-Frage: Der Username scheint ja ein Element von UserInfo zu sein. Ggf. macht also eine ObservableList<UserInfo> oder so Sinn. Das ist aber etwas, das man so mit dem kleinen Einblick nicht sagen kann.
Mir gefällt nicht, dass erst String oldUsername gelöscht und dann neuen hinzugefügt wird. Mit loop kann man Position aussuchen und so ersetzen, aber ich denke, dass alles mit stream viel schöner wäre, also users.stream. aber hab ich leider nicht hingekriegt. Für deine Rückmeldung danke ich dir ganz herzlich
 
K

kneitzel

Gast
Also eine Stream-basierte Lösung ist hier unnötig. Auf Zwang würde ich das auch nicht nutzen.
Du musst auch kein Schleife oder so bauen um das Element zu finden. Du hast beim Ersetzen zwei Aufrufe:
a) Finden des index mittels indexOf Aufruf
b) setzen des neuen Eintrages mittels set Aufruf.

Eine Stream Lösung selbst wäre aus meiner Sicht unleserlich und unnötig komplex. Das würde dann vermutlich darauf hinaus laufen, dass man alle Elemente streams, dann in einer map Methode schaut: Ist es das gesuchte Element, dann mapt man es zu dem neuen, ansonsten bleibt es das bestehende und dann sammelt man es in einer neuen ObervableList die man dann zuweist.
Aber neue ObservableList bedeutet, dass man auch die Observer wieder neu eintragen muss und so ... Und daran merkt man dann doch recht schnell, dass das nicht wirklich Sinn machen kann ...
 

Adriano10

Bekanntes Mitglied
Also eine Stream-basierte Lösung ist hier unnötig. Auf Zwang würde ich das auch nicht nutzen.
Du musst auch kein Schleife oder so bauen um das Element zu finden. Du hast beim Ersetzen zwei Aufrufe:
a) Finden des index mittels indexOf Aufruf
b) setzen des neuen Eintrages mittels set Aufruf.

Eine Stream Lösung selbst wäre aus meiner Sicht unleserlich und unnötig komplex. Das würde dann vermutlich darauf hinaus laufen, dass man alle Elemente streams, dann in einer map Methode schaut: Ist es das gesuchte Element, dann mapt man es zu dem neuen, ansonsten bleibt es das bestehende und dann sammelt man es in einer neuen ObervableList die man dann zuweist.
Aber neue ObservableList bedeutet, dass man auch die Observer wieder neu eintragen muss und so ... Und daran merkt man dann doch recht schnell, dass das nicht wirklich Sinn machen kann ...
Das klingt aber ganz gut, vielen Dank, mir wurde echt sehr geholfen
 

Neue Themen


Oben