Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vaadin Treetable-用于跳过父行的自定义排序_Java_Sorting_Parent_Vaadin_Treetable - Fatal编程技术网

Java Vaadin Treetable-用于跳过父行的自定义排序

Java Vaadin Treetable-用于跳过父行的自定义排序,java,sorting,parent,vaadin,treetable,Java,Sorting,Parent,Vaadin,Treetable,在我的vaadin7项目中,我需要在排序时忽略树表的父节点(行)。我可以使用ItemSort自定义排序,但我不知道如何跳过父节点 仅供参考:我可以用父节点的ItemId标识它 ***更新*** 我使用的是分层容器,我的树与此类似: Name Nos salary + Male(Node 1) 5 $12000 + Young 3 $6000 A 1

在我的vaadin7项目中,我需要在排序时忽略树表的父节点(行)。我可以使用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()。我忽略了所有其他用例。

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

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

  • 具有相同父元素的两个叶元素:
    使用DefaultItemSorter.compare()
  • 具有相同父元素(也为空)的两个父元素:
    返回值以保持所需的顺序
  • 一个元素到一个元素的根路径:
    返回一个值,使较深的元素位于较高的元素之后
  • 两个元素具有相同的父元素:
    在两条路径中,沿树向上移动,直到找到下一个父元素相同的深度,然后比较这两个元素。从更深层次的元素开始,一直向上,直到你与另一个元素处于同一层次
我希望我没有忘记一个案子。无论如何,我建议您编写几个单元测试,以确保ItemSorter在所有情况下都做正确的事情


如果您知道您的树具有特殊的特性,比如最大深度为2,那么您可以简化ItemSorter。我无法从你的问题中看出这一点。请下次添加更多详细信息

有人请回答这个问题。嘿,拉斐尔,我已经更新了我的问题。请检查一下。这可能有助于您理解我的问题。我在代码中重写了DefaultItemSorter。比较一下(o1,o2),我能用o1和o2做什么。它们只是对的对象。如何找到他们是否有相同的父母。一点代码对我有帮助。若我错了,请纠正我。o1和o2是要压缩的元素的ItemID。请参见此处的比较功能:谢谢raffael。。我会检查的。很高兴它成功了。这就是我所说的“叶元素”。没有子元素的元素