order by case when p.project_status = 1 then 0 else 1 end, pu.create_time desc
case when p.project_status = 1 then 0 else 1 end
这是一个CASE表达式,用于在查询结果中为每个项目生成一个临时的排序键。
它检查p.project_status(即项目的状态)是否等于1。
如果p.project_status = 1,则CASE表达式的结果为0;否则,结果为1。
在SQL排序中,较小的值会被视为更“优先”或更“靠前”。因此,所有project_status为1的项目将在这个排序逻辑的第一部分中排在前面(因为它们被赋予了值0),而其他项目则排在后面(被赋予了值1)。
//先按项目状态排序 再按照创建时间倒序排列
.sorted(Comparator.comparing(ProjectVO::getProjectStatus)
.thenComparing(ProjectVO::getCreateTime,Comparator.reverseOrder()))
.collect(Collectors.toList());
- 流(Stream)操作:
- 这段代码通常位于一个流操作链中,其中
.sorted(...)
是一个中间操作,用于对流中的元素进行排序。排序后的流会继续后续的流操作。
- 这段代码通常位于一个流操作链中,其中
- 排序逻辑:
.sorted(Comparator.comparing(ProjectVO::getProjectStatus)...
:这里使用Comparator.comparing
静态方法来创建一个比较器,该比较器会根据ProjectVO
对象的getProjectStatus
方法的返回值来比较两个ProjectVO
对象。这意味着流中的元素会首先按照项目的状态进行排序。.thenComparing(ProjectVO::getCreateTime,Comparator.reverseOrder())
:这是Comparator
接口中的一个方法,用于在第一个比较器(按项目状态排序)的基础上添加一个额外的排序条件。这里,它使用ProjectVO::getCreateTime
来指定第二个排序键,即项目的创建时间。同时,通过Comparator.reverseOrder()
来指定这个排序键应该使用倒序排列(即最新的时间排在前面)。
- 收集结果:
.collect(Collectors.toList())
:这是流操作链的终止操作,它使用Collectors.toList()
收集器来将流中的元素收集到一个新的列表中。在这个例子中,它收集的是已经按照项目状态和创建时间排序的ProjectVO
对象列表。
综上所述,这段代码的作用是将一组P