Java 具有搜索功能的TreeModelAdapter

Java 具有搜索功能的TreeModelAdapter,java,tapestry,Java,Tapestry,我现在正在使用Tapestry 5.3,并使用一个树组件来显示帐户列表的层次结构,它有4个级别。但现在,我正在与这种情况下的搜索功能作斗争: Level 1-1 |_ _ _ Level 2-1 |_ _ _ Level 2-2     |_ _ _ Level 3-1 |_ _ _ Level 3-2    | |_ _ _ Level 4-1 | |_ _ _ Level 4-2 |_ _ _ Level 3-3

我现在正在使用Tapestry 5.3,并使用一个树组件来显示帐户列表的层次结构,它有4个级别。但现在,我正在与这种情况下的搜索功能作斗争:

Level 1-1
|_ _ _ Level 2-1 
|_ _ _ Level 2-2
       |_ _ _ Level 3-1
       |_ _ _ Level 3-2
       |      |_ _ _ Level 4-1
       |      |_ _ _ Level 4-2
       |_ _ _ Level 3-3
比如说。用户想要搜索4-1级帐户,树应该如下所示

Level 1-1
|_ _ _ Level 2-2
       |_ _ _ Level 3-2
              |_ _ _ Level 4-1

有人能帮我做些逻辑方面的事吗?谢谢。

我终于明白了

我创建了一个新类
AccountTreeModelAdapter
,它是实现的。您可以重写
getChildren
方法并将搜索逻辑放在那里。对我来说,它在这个流程中工作:

  • AccountTreeModelAdapter
  • 从主类中设置它的值
  • getChildren
    方法中,使用
    Iterator
    迭代整个列表(所有帐户),并逐个与
    searchedAccounts
    列表中每个帐户的代码进行比较(在Java 8中使用
    searchedAccounts.stream().filter()
瞧,现在这棵树只会显示你想要的账户。 但是,如何显示父对象?在此之前,树不会一次又一次地显示父级、父级的父级和父级的父级,直到到达根为止

为此,我在数据库中为我的帐户实体创建了一个新列。这是
accountPath
。因此,每次用户创建帐户时,此
accountPath
的工作方式如下:

Account "ABC" (ID: 1)
    |_ _ _ "XYZ" (ID: 2)
        |_ _ _ "OPQ" (ID: 3)
            |_ _ _ "STU" (ID: 4)
帐户“ABC”将没有路径(因为它是根)。 帐户“XYZ”将具有路径-1- 帐户“OPQ”将具有路径-1-2- 帐户“STU”将具有路径-1-2-3-

要获取每个父项的ID,请使用string.split(“-”)

因此,如果希望树显示父帐户,只需将父帐户添加到
searchedAccounts
列表中即可


就这些。

最后,我终于明白了

我创建了一个新类
AccountTreeModelAdapter
,它是实现的。您可以重写
getChildren
方法并将搜索逻辑放在那里。对我来说,它在这个流程中工作:

  • AccountTreeModelAdapter
  • 从主类中设置它的值
  • getChildren
    方法中,使用
    Iterator
    迭代整个列表(所有帐户),并逐个与
    searchedAccounts
    列表中每个帐户的代码进行比较(在Java 8中使用
    searchedAccounts.stream().filter()
瞧,现在这棵树只会显示你想要的账户。 但是,如何显示父对象?在此之前,树不会一次又一次地显示父级、父级的父级和父级的父级,直到到达根为止

为此,我在数据库中为我的帐户实体创建了一个新列。这是
accountPath
。因此,每次用户创建帐户时,此
accountPath
的工作方式如下:

Account "ABC" (ID: 1)
    |_ _ _ "XYZ" (ID: 2)
        |_ _ _ "OPQ" (ID: 3)
            |_ _ _ "STU" (ID: 4)
帐户“ABC”将没有路径(因为它是根)。 帐户“XYZ”将具有路径-1- 帐户“OPQ”将具有路径-1-2- 帐户“STU”将具有路径-1-2-3-

要获取每个父项的ID,请使用string.split(“-”)

因此,如果希望树显示父帐户,只需将父帐户添加到
searchedAccounts
列表中即可

就这些