1. 程式人生 > >基於java反射篩選List對於不同實體泛型的公共方法

基於java反射篩選List對於不同實體泛型的公共方法

前提:在最近做的專案當中有個奇葩的需要,就是需要將已知的list<實體類>進行一次篩選,查詢list裡面屬性中的值是否包含某個值(模糊查詢)。將符合要求的物件新增到一個list1裡面,從而生成一個新的
list1<實體類>。
在上面的需求當中主要的就是需要在實現這個方法中,能將其需求抽離出來,不管實體類到底是哪個實體類都能呼叫該方法。
所以我們在設定方法的時候需要傳遞2個引數,1.要篩選的list<實體>,2.需要匹配的欄位str,那麼方法返回的是新的list。或者我們在呼叫方法之前遍歷list<實體類>設定方法的2個引數,1.引數為list<實體類>.get(i),2.需要匹配的欄位str,那麼返回的是布林型別。在呼叫方法的外面去add新的list。
按照上面設定的思路我們進行編寫程式碼
情況1:
按照上面的描述。我們在編寫公共方法時,傳遞的引數為要篩選的list<實體>,需要匹配的欄位str

    public static List<Object> testClass(List<Object> object,String str)

這裡寫圖片描述
因為是公共方法 所以在我們的方法中不能去具體的規定List的泛型。上面的方法做會出現引數型別的報錯。
所以情況1不是那麼合適。
情況2:在情況2中設定的方法為:

    public static boolean testClass(Object object,String string)

呼叫方法時:
這裡寫圖片描述
所圖所示就能完成引數的對應了。接下來看公共方法中的具體實現內容。

package
com.lotus.billing.utils; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; /** * 用來將原來的list列表資料轉化篩選的工具類 ListFilter.java * @author HQ L * TIME :2017年9月27日09:54:24 */ public class ListFilter
{
/** *<p> *實現list篩選的公共方法 *</p> *@param Object 傳入進行篩選的的類 *@param string 匹配字串 *return boolean 返回引數true或者false判斷是否存在要篩選的字串 */ public static boolean testClass(Object object,String string) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ //通過反射getClass獲取傳入引數物件的實體類 Class class1 = object.getClass(); //獲取傳入引數的屬性 Field[] fields = class1.getDeclaredFields(); //將所有屬性值拼接在一起成為新的字串 String sb = new String(); for (Field field : fields){ //獲取get方法 Method m = (Method) class1.getMethod( "get" +field.getName()); //拼接字串 sb = sb+m.invoke(object); } //呼叫字串檢查的方法 return fuzzyFiltering(sb, string); } public static boolean fuzzyFiltering(String searchText,String str){ if(!"".equals(searchText)&&searchText!=null){ if(searchText.indexOf(str) !=-1){ return true; } } return false; } }

相關推薦

基於java反射篩選List對於不同實體公共方法

前提:在最近做的專案當中有個奇葩的需要,就是需要將已知的list<實體類>進行一次篩選,查詢list裡面屬性中的值是否包含某個值(模糊查詢)。將符合要求的物件新增到一個list1裡面,從而生

Java反射通過class獲取父類型別

但是,對於獲取父類的泛型型別,還是會有辦法的。在Class類中,有這樣一個方法: /** * Returns the {@code Type} representing the direct superclass of * the entity (class, interface,

基於Java反射的map自動裝配JavaBean工具類設計

person urn exception map.entry ati test javabean 好的 declare 我們平時在用Myabtis時不是常常需要用map來傳遞參數,大體是如下的步驟: public List<Role> findRoles(M

Spring Ioc基於java反射而遠遠高於反射---Spring框架三大核心介面

關於最基礎的Ioc的概念及其思想,我們在 1、java反射 那麼,接下來,我們從反射入手,開始Spring征程。看例子: package com.smart.reflect; public class Car { privat

通過java反射比較兩個相同實體類屬性值的差異

此方法可以通過傳入兩個實體物件,一個字串陣列(需要進行比較的實體類屬性名稱),返回兩個實體類屬性的差異public class CompareFileds { private static Logger logger = LoggerFactory.getLogger(Com

基於Java反射的定時任務設計

一、使用場景 1、不需要立即執行、立即得到結果返回。 2、如果執行失敗、需要有失敗補償機制。 3、和業務程式碼解耦,適用於不同的務場景。 4、呼叫介面的入參、出參 統計,方便查詢。 二、執行順序 1、業務邏輯中,需要呼叫外部介面時,將引數組裝好,往任務表中插入一條任務記錄。(主要包括 任務型別、需要執行的類、

使用java反射機制動態調用javabean的get,set方法

pre 完成 cep doc return 形參 語言 基本 實例 轉自:https://blog.csdn.net/lixinyao5281/article/details/70146177?locationNum=14&fps=1&t=149327688

java遍歷List中的map的幾種方法

 Stueng 類 public class Student { private String name; private int age; private int taller; public Student( String name, int age, int ta

Java 反射建立類的例項物件(預設構造方法和私有構造方法

反射之建立類的例項物件 通過反射可以建立Class<?>中”?”對應的型別的例項物件,眾所眾知,建立類物件,會呼叫構造方法,構造器可以有多個,預設構造方法,多引數構造方法等。 這裡演示,通過反射建立預設構造方法的例項物件,和帶引數的構造方法的例項

java List Map String Object通用排序 支援兩個欄位排序

環境 java:1.7+ 前言 公司有個公共的排序方法類,其中,字串一個方法、日期字串一個方法、數字一個方法等等; 我覺得這些方法都可以寫成一個方法; 下面程式碼只針對List<Map<String, Object>>這種方

Java集合之List遍歷找到匹配元素刪除方法總結

問題:在我們使用java開發的過程中可能會遇到這樣的問題,刪除List集合中與已知元素 相同的所有元素; 比如下面這個需求: 刪除List集合中字串為“edf”的所有記錄 案例: 方案一:你可能回想到使用forEach遍歷,找到匹配的

Java反射程式碼--07.根據欄位呼叫所有set方法

/**   * 7.根據欄位呼叫所有set方法   *   */  public void reflect7(){       try {          Class cls = Class.forName("entity.UserBean");//載入UserBean類到記憶體中!獲取一個Class物件

javalist轉換為map 的通用方法

將list轉換為map 背景:最近使用比較多的mongodb,由於其缺乏表連線的查詢,導致我們經常需要將表資料查詢到記憶體中,然後進行匹配連線,組成需要的資料格式,匹配的方式通常是: list1中有list2需要的欄位,於是將list1轉換為map,遍歷list2,從ma

Java反射通過父類物件呼叫子類的方法

在做網站開發的時候我們都會寫一個控制器,控制器的作用就是接收客戶端的請求,有時候為了控制訪問入口的唯一性,方便我們監控使用者訪問的資料;最近在抽時間寫一個底層轉發控制器請求的工具,說通俗一點就是首先我定義一個抽象類或者介面A(實現類A就標識為控制器),然後定義很

動態轉換list的資料型別,將map別的list轉成實體別的

/** * 將一個map組成的list轉成實體類bean組成的list * @param mapList 存了map物件的list * @param clazz 需要將這些map轉成哪個實體類物件 * @return */ public <T&g

java機制學習——反射,註解,代理,

java 反射機制在很多地方都有用到。 1、反射的概念: JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意方法和屬性;這種動態獲取資訊以及動態呼叫物件方法的功能稱為java語言的反射機制。 Ja

Java反射機制 invoke呼叫含多個引數的方法

通過Java的反射機制呼叫某個方法,並傳入引數。 1.只傳入一個引數hello world: import java.lang.reflect.Method; import java.util.Date; public class InvokeMethodTest {

Java反射:通過父類物件呼叫子類方法

通常情況下在父類中不能直接呼叫子類中的方法(重寫的除外),但是在某些特殊的情況下,需要根據一個父類的物件來呼叫子類的方法,原理就使用java的反射原理。例如:Person類,有一個name屬性publ

《Effective Java》第二章 對於所有物件都通用的方法

接下來繼續講第二章,第8-12條。第8條:覆蓋equals時請遵守通用約定equals 時Object類的一個非final方法,一般是表示類的例項物件是否相同,也就是物件的地址是否相等。但是某些時候卻要重寫Object.equals方法。即類需要有“邏輯相等”,也就是值類,這

java反射呼叫指定jar包中的類和方法

需求:動態載入jar包,例項化jar包中的類,並呼叫類中的方法 已知:jar包所在路徑和jar包名稱,類名已知,類繼承的抽象類可以被引入,類中的方法已知 實現方法: 1. 手動呼叫類載入器動態載入jar包; 2. 應用java中的反射例項化類,得到類的一個例項; 3. 運