基於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物件
java 將list轉換為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. 運