Java: Как проверить все пути JTree для String
Я уже давно смотрю на это, но, похоже, не могу найти много информации об этом в Интернете. У меня есть JTree и список строк. Я хочу найти только самые нижние уровни JTree(поэтому ищется не каждый узел в дереве, а только самые нижние узлы) для каждой из строк и добавить строку в список, если искомая строка присутствует в путь самого низкого узла
что-то вроде этого
public List<String> searchLowestNodes(List<String> wordsToSearchFor){
List<String> matches = new ArrayList<>;
for(String word: wordsToSearchFor){
// i do not know how to get the lowest node for each path
if(path.contains(word)){
matches.add(word);
}
//keep looping for all paths
}
return matches;
}
Кто-нибудь знает, как это можно сделать?
РЕДАКТИРОВАТЬ: Пример дерева
Root
-assignment1
--paul
---example.java
--john
---example.java
-assignment2
--a2
---sean
----assignment.java
---mark
----assignment.java
поэтому, учитывая следующее дерево, он должен искать только следующие пути для слов
root>assignment1>paul>example.java
root>assignment1>john>example.java
root>assignment2>a2>sean>assignment.java
root>assignment2>a2>mark>assignment.java
я не хочу добавлять
root>assignment1
root>assignment1>paul
...
1 ответ
Сначала извлеките корень модели дерева:
rootNode = (DefaultMutableTreeNode)tree.getModel().getRoot()
Теперь, имея этот узел, обойдите все дерево и сохраните листья в вашей собственной структуре данных. Вы можете пройтись по дереву, используя rootNode.depthFirstEnumeration()
работает через перечислитель и проверяет каждый элемент element.isLeaf()
,
После того, как у вас есть все листья, найдите их пути: element.getPath()
, Это дает вам массив узлов от корневого до конечного узла.
Теперь вы можете делать с ними все, что захотите.