利用反射實現自定義比較器

2021-10-18 13:30:30 字數 1195 閱讀 1523

解決方案

優化空間

問題背景

需求:從第三方獲取資料列表,傳到前台進行展示,目前前台需要可以根據任意字段進行排序(公升序和降序),但是第三方介面不支援排序功能,所以需要手動實現資料的排序。

問題分析

方案一:資料入庫

方案二:根據字段進行排序

解決方案

思路資料列表的排序主要是針對欄位的比較器進行的,那我們的目標就是建立基於自定義欄位的比較器,那大小關係的比較必定設計到字段的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...