github编辑

排序专家SortUtil

JAVA开发排序少不了的,曾几何时以为排序就是数据库SQL order by,后来你会发现,你的数据可能源自于别人的API,也可能直接源自EXCEL...这时要排序,好吧 我去写自定义 Comparator,好累好累的说

我们来看看 排序专家 - SortUtil

主要由下面几个部分组成:

SortUtil

1.排数组.

方法
Description

sortArray(T[])

对 数组 arrays 进行排序.

sortArray(T[], Comparator...)

对 数组 arrays使用 comparator 进行排序.

1.1 sortArray(T[])

对 数组 arrays 进行排序.

示例:

以前代码需要写成:

现在可以重构成:

**再如: **

可以重构成:

1.2 sortArray(T[], Comparator...)

对 数组 arrays 使用 comparator 进行排序.

示例: 场景: 对字符串数组先按照长度比较,如果长度相等,那么再按照字母比较

2.排集合

方法
Description

sortList(List)

对 集合 list 进行排序.

sortList(List, Comparator...)

对集合 list,使用指定的 comparators 进行排序.

sortListByFixedOrderPropertyValueArray(List, String, V...)

对 集合 list,属性 propertyName 按照固定顺序值 propertyValues 进行排序.

sortListByFixedOrderPropertyValueList(List, String, List)

对 集合 list,属性 propertyName 按照固定顺序值 propertyValues 进行排序.

sortListByPropertyNamesValue(List, String...)

对集合 list,按照指定属性的值(组合)进行排序.

2.1 sortList(List)

对 集合 list 进行排序.

说明:

  • Collections.sort 底层就是调用的是 Arrays.sort

示例:

2.2 sortList(List, Comparator...)

对集合 list,使用指定的 comparators 进行排序.

示例: 场景: 将 user list 按照 id进行排序

返回:

当然对于上述示例,你可以直接调用:

我们再来个复杂点的例子: 将 user list 按照 "刘备" 排在 "关羽" 前面 进行排序,如果名字相同再按照 age进行排序

返回:

2.3 sortListByFixedOrderPropertyValueArray(List, String, V...)

对 集合 list,属性 propertyName 按照固定顺序值 propertyValues 进行排序.

示例: 场景: 将user list中 "刘备" 排在 "关羽"前面

此时你可以直接调用:

返回:

2.4 sortListByFixedOrderPropertyValueList(List, String, List)

对 集合 list,属性 propertyName 按照固定顺序值 propertyValues 进行排序.

示例: 场景: 将user list中 "刘备" 排在 "关羽"前面

返回:

2.5 sortListByPropertyNamesValue(List, String...)

对集合 list,按照指定属性的值(组合)进行排序.

示例: 场景: 将user list 先按照 id 再按照 age 进行排序

返回:

3.排Map

方法
Description

sortMapByKeyAsc(Map<K, V>)

按照key asc顺序排序.

sortMapByKeyDesc(Map<K, V>)

按照key desc 倒序排序.

sortMapByValueAsc(Map<K, V>)

根据value 来顺序排序(asc).

sortMapByValueDesc(Map<K, V>)

根据value 来倒序排序(desc).

sortMap(Map<K, V>, Comparator<Entry<K, V>>)

使用 基于 Entry 的 mapEntryComparator 来对 map进行排序.

3.1 sortMapByKeyAsc(Map<K, V>)

按照key asc顺序排序.

注意:

  • 原 map 的顺序不变

  • 该方法使用了 PropertyComparator,允许 null key,null key排在最前面

  • 如果直接使用 java.util.TreeMap.TreeMap(Map),TreeMap不允许 key是null,如果有key是null,那么将会抛出 NullPointerException

示例:

返回:

3.2 sortMapByKeyDesc(Map<K, V>)

按照key desc 倒序排序.

注意:

  • 原 map 的顺序不变

  • 该方法使用了 PropertyComparator,允许 null key,null key排在最后面

示例:

返回:

3.3 sortMapByValueAsc(Map<K, V>)

根据value 来顺序排序(asc).

注意:

  • 原 map 的顺序不变

示例:

返回:

3.4 sortMapByValueDesc(Map<K, V>)

根据value 来倒序排序(desc).

注意:

  • 原 map 的顺序不变

示例:

返回:

3.5 sortMap(Map<K, V>, Comparator<Entry<K, V>>)

使用 基于 Entry 的 mapEntryComparator 来对 map进行排序.

说明:

  • 原 map 的顺序不变

  • 由于是对Entry排序的, 既可以按照key来排序,也可以按照value来排序哦

示例: 比如有以下的map

如果我们只是使用 :

返回:

此时可以看出 a13是以字符串的形式进行比较的,我们可以使用以下的自定义的 Comparator,来达到排序的效果

返回:

最后更新于

这有帮助吗?