不能直接在数据库排序 数据要从数据库查出组装,然后排序
1
CEBBCAT 2021-07-20 18:00:27 +08:00 via Android
看得不是很懂,但我之前有一次排序也是很头大,那次我是通过算分来间接排序的,把所有的值都落在 int 上,然后按照顺序读出
|
2
potatowish 2021-07-20 19:02:16 +08:00 via iPhone
维护一个枚举类型,column,sortType,Comparator,isReversed, 再写一个方法根据 column sortType isReversed 匹配到唯一的枚举,另外一个方法根据枚举来动态处理数据
|
3
potatowish 2021-07-20 19:03:43 +08:00 via iPhone
@potatowish 采用这种方式,不需要在业务类写大量判断,只需要维护这个枚举中的映射关系就好了
|
4
ForkNMB 2021-07-20 19:59:22 +08:00
逆序不要用 reversed 噢,没啥必要,直接在比较器里传参就行,list.stream().sorted(Comparator.comparing(类::属性一,Comparator.reverseOrder()));
至于优化的话,维护一个枚举类,维护不同种类的比较器即可(比较器的字段类型,是否逆序这些信息) |
5
oneisall8955 2021-07-20 20:27:42 +08:00 via Android
枚举类+抽象方法 简简单单又美观
|
6
xiang0818 2021-07-21 16:48:12 +08:00 1
```
package com.netease.ehr.mbo.model.enums; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; /** * @author xiang0818 * @date 2021-07-21 16:06 */ public enum SortEnum { /** * . */ COUNT("count", SckPriceVo::getCount), ; private final String column; private final Function<SckPriceVo, Integer> functionGen; SortEnum(String column, Function<SckPriceVo, Integer> functionGen) { this.column = column; this.functionGen = functionGen; } public String getColumn() { return column; } private Comparator<SckPriceVo> getComparing(String sortType) { if (sortType.equals("1")) { return Comparator.comparing(functionGen); } else if (sortType.equals("2")) { return Comparator.comparing(functionGen).reversed(); } throw new RuntimeException("error"); } private static SortEnum getByColumn(String column) { for (SortEnum value : SortEnum.values()) { if (value.column.equals(column)) { return value; } } throw new RuntimeException("error"); } public static List<SckPriceVo> getSort(List<SckPriceVo> sckPriceVoList, String column, String sortType) { return sckPriceVoList.stream().sorted(SortEnum.getByColumn(column).getComparing(sortType)).collect(Collectors.toList()); } } |
7
EAFA0 2021-07-21 20:36:43 +08:00
简单抽象一下? 写个封装函数?
``` json public static sort(Collection<T> collection, Function<T, Comparable> getField, boolean isReserve) ``` 大概这个样子? |
9
siweipancc 2021-07-26 08:59:37 +08:00 via iPhone
封装一个动态排序器,由前段调用时候生成。
|