【发布时间】:2015-07-09 22:35:59
【问题描述】:
Parent 是一个由 Child 继承的类。由 GrandChild 继承。每个类都包含子类的列表(即父类包含子类列表,子类包含子类列表)。每个类包含 50 个属性(attrib1-atrib50)。 getChildList() 返回 Child 类型对象的 arrayList getGrandChildList() 返回 GrandChild 类型对象的 arrayList
设 resultSet 为父列表
List<Parent> resultSet
现在我想根据一些属性对列表进行排序。例如,如果我想根据两个父属性(比如属性 1 和属性 2)对结果集进行排序,我使用此代码。
Comparator<Parent> byFirst = (e1, e2) -> e2.getAttrib1().compareTo(e1.getAttrib1());
Comparator<Parent> bySecond = (e1, e2) -> e1.getAttrib2().compareTo(e2.getAttrib2());
Comparator<Parent> byThird = byFirst.thenComparing(bySecond);
List<Parent> sortedList = resultSet.stream().sorted(byThird).collect(Collectors.toList());
现在我想根据 Child 类的属性 1 和 GrandChild 类的属性 1 对 parentlist 进行排序。我应该如何排序。
【问题讨论】:
-
如果每个
Parent中有很多Child,你如何按Child的属性对Parent的列表进行排序?您将使用列表中的哪个孩子来获取要比较的属性? -
通过 getChildList() 我获得了 Child 的访问权限,我将选择一个子属性。
-
那么如果父母有 10 个孩子,他们的 attr1 值都不同,你会使用哪一个?
标签: java sorting java-8 comparator java-stream