【发布时间】:2019-05-06 05:01:25
【问题描述】:
我需要以自定义方式对我的对象数组进行排序。
假设我的对象中有两个字段——priority(可空)和createdAt(不可空)。
优先级字段说明项目应该在哪个位置。但是,它可以为空。在这种情况下,我们应该考虑 createdAt 字段(按降序排列)进行排序。
让我用例子来解释一下。 例如我的对象是:
Object0: priority: null, createdAt: 2018-12-01
Object1: priority: 1, createdAt: 2018-12-02
Object2: priority: 5, createdAt: 2018-12-03
Object3: priority: null, createdAt: 2018-12-04
Object4: priority: null, createdAt: 2018-12-05
Object5: priority: 2, createdAt: 2018-12-06
Object6: priority: null, createdAt: 2018-12-07
最终的顺序应该是:
- Object1(按其优先级)
- Object5(按其优先级)
- Object6(通过 createdAt desc 填充左侧位置)
- Object4(通过 createdAt desc 填充左侧位置)
- Object2(按其优先级)
- Object3(通过 createdAt desc 填充左侧位置)
- Object0(通过 createdAt desc 填充左侧位置)
我怎样才能实现我的目标?是否有现成可用的比较器?
编辑: 我认为我们可以使用该类:
public class MyObject {
Integer priority;
LocalDateTime createdAt;
}
【问题讨论】:
-
可以给相关的课吗?
-
老实说,我没有这门课。我的情况更复杂,在这里我将其减少到最低限度。我将编辑我的帖子,但提供最低级别。
-
为什么object6和object4在object5和object2之间?您可以使用自己的比较器 lambda 轻松排序,但我不清楚您的算法。
-
Object5 的优先级为 2,所以它会到达位置 2。Object2 的优先级是 5,所以它会到达位置 5。当我们将所有对象都放在它们的位置时,我们使用排序的对象填充数组中的左侧空格创建于。我希望现在会更清楚。
-
你不能这样排序,因为你说你需要优先级作为索引,这不是它的工作方式,你只能比较它们之间的元素,之前/之后/等于
标签: java spring java-stream comparator comparable