1
NillSpake 2021-08-11 16:10:14 +08:00
|
2
vance123 2021-08-11 16:10:51 +08:00 1
作业自己做
|
3
guaguaguaxia1 2021-08-11 16:13:20 +08:00
排序顺序外部传入啥意思
|
4
Daisy17607 OP @NillSpake @vance123 这种
List<RowSortDTO> collect = rows.stream().sorted( Comparator.comparing(RowSortDTO::getVal1) .thenComparing(RowSortDTO::getVal2) .thenComparing(RowSortDTO::getVal3) .thenComparing(RowSortDTO::getVal4) .thenComparing(RowSortDTO::getVal5) ).collect(java.util.stream.Collectors.toList()); 这都是自然顺序排的嘛。从外面指定一个顺序,比如一个布尔,或一个枚举,表明是正序还是倒序 |
5
Daisy17607 OP @guaguaguaxia1 看我上条回复说清楚没
|
6
28Sv0ngQfIE7Yloe 2021-08-11 16:20:32 +08:00
可以啊 实现几个策略枚举就行了啊。然后调用枚举的排序方法就好
|
7
chendy 2021-08-11 16:25:18 +08:00
维护一个 Map<String, Comparator<Stirng>> ,接收一个 String,取 Comparator 做排序
如果只有正序倒序就接个 boolean 判断一下就行了,没必要弄太复杂 |
8
INTOX8O 2021-08-11 16:54:53 +08:00
和一楼类似:维护一个 Function,以 Function 的具体实现为排序条件 https://z3.ax1x.com/2021/08/11/fUvR9x.png
|
9
Daisy17607 OP |
10
zliea 2021-08-11 17:17:00 +08:00
外部传入[{"sortBy":"xxx","direction":ASC}],然后去反射获取值然后拼接 Comparator ?
|
11
Daisy17607 OP @ztechstack 差不多,就是根据指定的顺序决定我要不要加.reversed()方法
|
12
thetbw 2021-08-11 17:34:04 +08:00
外部排序就是每个规则都有个优先级呗,例如 c 开头的优先级最高,x 开头的其次,那就按照传统的排序方法,遍历 这个外部规则,计算出一个优先级,先按照这个优先级排序,相同优先级再按照默认的。感觉和之前写过类似的 sql.
https://segmentfault.com/a/1190000021517916 |
13
quan7u 2021-08-11 18:06:50 +08:00
前几天做了个类似需求,无脑遍历了
|