【问题标题】:sorting child list from parent in java 8在java 8中从父级排序子列表
【发布时间】:2015-08-03 17:14:43
【问题描述】:

Parent 是一个由 Child 继承的类。由GrandChild 继承。每个类都包含子类的列表(即父类包含ChildListChild 包含GrandChildList)。每个类包含 50 个属性(attrib1-atrib50)。 getChildList() 返回 arrayList 类型的对象 ChildgetGrandChildList() 返回 arrayList 类型的对象 GrandChild

resultSet 成为ListParent

List<Parent> resultSet

现在我想根据一些属性对列表进行排序。例如,如果我想根据两个父属性(比如属性 1 和属性 2)对 resultSet 进行排序,我使用此代码。

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);

resultSet.sort(byThird);

现在我的下一个标准是分别对每个孩子进行排序。 例如,如果我的条件是子列表的attribute15,那么我想按arribute15对每个子列表进行排序, 对于List&lt;Parent&gt; 中的每个父对象。我应该如何使用 Java 8 概念(特别是流)来做到这一点。 (请不要给我一个通过for循环迭代每个父级并获取childlist并对其进行排序的解决方案。)

【问题讨论】:

  • 当你有这么多属性时,可能是时候改用动态属性了(在HashMapEnumMap 中存储名称-值对)...另外Comparator&lt;Parent&gt; byFirst = Comparator.comparing(Parent::getAttrib1); 看起来更好我。

标签: java sorting lambda java-8


【解决方案1】:

您可以使用forEach 遍历Parents,然后对Child 列表进行排序:

resultSet.stream()
        .forEach(p -> p.getChildList().sort(Comparator.comparing(Child::getAttrib15)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2018-07-14
    • 2013-08-20
    • 1970-01-01
    • 2019-06-11
    • 2013-07-23
    • 1970-01-01
    相关资源
    最近更新 更多