gpt4 book ai didi

java - Vaadin Treetable - 自定义排序以跳过父行

转载 作者:行者123 更新时间:2023-11-30 11:30:42 25 4
gpt4 key购买 nike

在我的 Vaadin 7 项目中,我需要在排序时忽略树表的父节点(行)。我可以使用 ItemSort 自定义排序,但我不知道如何跳过父节点!

仅供引用:我能够通过 ItemId 识别我的父节点。

***更新***

我正在使用分层容器,我的树与此类似:

Name            Nos             salary
+ Male(Node 1) 5 $12000
+ Young 3 $6000
A 1 $3000
B 1 $1000
c 1 $2000
+ Old 2 $6000
A 1 $3000
B 1 $3000
+ Female(Node 2)5 $13000
+ Young 3 $5000
A 1 $2000
B 1 $1000
c 1 $2000
+ Old 2 $8000
A 1 $5000
B 1 $3000

问题是当我对工资栏进行排序时,它包括每个人在“男性、年轻人和老年人”、“女性、年轻人和老年人”行的工资总和,并调整“男性、女性”和“年轻人”的位置, 旧”类别。

我只想跳过自定义排序中的父节点。它应该只有子节点。简单来说。所有的父节点都应该是固定的,只有子节点需要排序。

更新的用例

两个元素有相同的父节点并且这两个元素没有子节点然后我使用了 DefaultItemSorter.compare()。我忽略了所有其他用例。

最佳答案

我有一个相关的问题,特殊的树表排序。我最终编写了自己的 Container 和 Comperator 实现。

您的问题取决于您使用的容器,因为排序是由底层容器而不是表完成的。默认情况下,TreeTable 使用 HierarchicalContainer 实现,您可以在其中使用自己的 ItemSorter 实现。您可以扩展 DefaultItemSorter 并在比较两个元素时区分不同的情况:

  • 具有相同父元素的两个叶元素:
    使用 DefaultItemSorter.compare()
  • 具有相同父元素(也为空)的两个父元素:
    返回值以保持你想要的顺序
  • 根路径中的一个元素:
    返回一个值,使更深的元素在更高的元素之后。
  • 具有相同父元素的两个元素:
    在这两条路径中,沿着树往上走,直到找到下一个父元素相同的深度,然后比较这两个元素。从更深层次的元素开始,一直向上,直到你与另一个元素处于同一水平。

我希望我没有忘记一个案例。无论如何,我建议您编写几个单元测试,以确保您的 ItemSorter 在所有情况下都做正确的事情。

如果您知道您的树具有特殊的特性,例如最大深度为二,您可能会简化 ItemSorter。我从你的问题中看不出这一点。请下次添加更多详细信息。

关于java - Vaadin Treetable - 自定义排序以跳过父行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17653158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com