解決方案
優化空間
問題背景
需求:從第三方獲取資料列表,傳到前台進行展示,目前前台需要可以根據任意字段進行排序(公升序和降序),但是第三方介面不支援排序功能,所以需要手動實現資料的排序。
問題分析
方案一:資料入庫
方案二:根據字段進行排序
解決方案
思路資料列表的排序主要是針對欄位的比較器進行的,那我們的目標就是建立基於自定義欄位的比較器,那大小關係的比較必定設計到字段的get方法,由於欄位名不定,所以可以通過反射動態的呼叫欄位的get方法。
實現
解釋/**
* 自定義排序器
*/public
class
highquelityseedcomp
implements
comparator
); bigdecimal value2 =
(bigdecimal)getmethod.
invoke
(o2,
newobject
);return
"asc"
.equals
(isasc)
? value1.
compareto
(value2)
:value2.
compareto
(value1);}
catch
(exception e)
return0;
}}
物件屬性中並沒有isasc和orderby屬性,我是在獲取資料列表之後,手動將前台上送的值,傳入到物件中,便於在比較器中使用;畢竟重寫的compare方法簽名不支援傳輸更多的字段。
呼叫//手動排序
string orderby = pagedomain.
getorderbycolumn()
; string isasc = pagedomain.
getisasc()
;if(stringutils.
isnotempty
(orderby)))
;
優化空間list.
sort
(new
highquelityseedcomp()
);
STL自定義比較器
struct person 自定義的比較器 struct comparebyage sort vec.begin vec.end comparebyage 排序傳入我們自定義的比較器map內部的實現使用的是樹,不能夠直接排序,我們可以將其放在乙個vector中,然後自定義乙個比較器去排序 map m...
STL 自定義比較器
說明 採用sort函式舉例 sort函式能夠接收2個形參 stl中的絕大多數用於查詢 排序的函式的前2個引數基本上都是乙個範圍 first,last 第3個引數一般是乙個比較器仿函式 即 設定大小比較原則compare 下面介紹5種常見的比較器定義手段 自定義普通比較器函式cmp include i...
自定義註解 反射
需求 在做許可權平台的時候,需要寫乙個查詢審計記錄列表的介面。這個需求看起來非常簡單,就是從資料庫單錶裡面查出資料,返回json格式。然而,資料庫裡有兩列,修改前和修改後的json。需要翻譯成字串整個返回。資料庫的source欄位的json長這樣 status used end date is de...