Ich möchte ein javaFx
TreeView
mit eindeutigen String-Etiketten mit einer sehr großen Liste von Strings.JavaFX TreeView mit eindeutigen Strings
@Override
public void initialize(URL location, ResourceBundle resources) {
myTreeView.setRoot(new TreeItem());
myTreeView.setShowRoot(false);
}
public void addUniqueItem(String item) {
List<TreeItem> treeNodes = myTreeView.getRoot().getChildren();
if (!treeNodes.contains(item)) {
treeNodes.add(new TreeItem<>(item));
treeNodes.sort((o1, o2) -> ((String)o1.getValue()).compareTo((String)o2.getValue()));
}
}
Jetzt funktioniert diese addUniqueItem
nicht. Denn treeNodes.contains(item)
gibt immer false zurück, da die Typen nicht übereinstimmen.
Also habe ich drei Fragen.
- Wie die
contains
Funktion hier korrigieren.- Da es eine Liste ist, die ich von
myTreeView.getRoot().getChildren()
die enthält, ist O (n) Suche, kann folglich sehr langsam sein. Wie kann ich es schneller machen, indem ich esSet
oder irgendein anderescontainer
mache?- Ich denke, meine ganze Herangehensweise ist falsch. Wie implementiere ich eine
TreeView
, die einen String-Knoten eindeutig hinzufügen kann?
--ROOT
----CH1
----CH5
.......
----CH10
Jetzt Hinzufügen CH1
wieder, würde nichts ändern.
Bearbeiten: Eine temporäre funktionierende Lösung ist, dass ich eine Kopie der gleichen Namen in einem HashSet
und suchte dort, um zu finden, dass es bereits existiert oder nicht. dann aktualisiert die TreeView
entsprechend.
Sie brauchen nur einen einzigen Methodenaufruf für eine Set-Methode in der 'addUniqueItem' Methode:' if (uniqItemSet.add (Punkt)) {...} treeNodes.add ' – fabian
Ich brauche einen Baum, Hierarchie wurde nicht hinzugefügt, um es einfach zu halten. Yeah funktioniert für jetzt. Danke für die Antwort. – Ultraviolet
Als akzeptiert markieren, wenn es hilft;) – user43968