Browse Source

工具类

zhoutg 4 years ago
parent
commit
828b829023
1 changed files with 78 additions and 9 deletions
  1. 78 9
      src/main/java/com/diagbot/util/CoreUtil.java

+ 78 - 9
src/main/java/com/diagbot/util/CoreUtil.java

@@ -1,11 +1,12 @@
 package com.diagbot.util;
 
 import com.diagbot.model.entity.Clinical;
-import com.diagbot.model.entity.General;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @description:
@@ -51,6 +52,40 @@ public class CoreUtil {
         return getPropertyList(list, "name");
     }
 
+    /**
+     * 将列表中属性对应的值从map中获取,如果有值,将standName替换
+     *
+     * @param list
+     * @param propertyName
+     * @param <T>
+     * @return
+     */
+    public static <T> List<String> setPropertyList(List<T> list, String propertyName, String standName, Map<String, String> map) {
+        List<String> res = new ArrayList<>();
+        if (ListUtil.isEmpty(list)) {
+            return res;
+        }
+        for (T t : list) {
+            try {
+                setFieldValue(t, propertyName, standName, map);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return res;
+    }
+
+    /**
+     * 将列表中属性对应的值从map中获取,如果有值,将standName替换
+     *
+     * @param list
+     * @param <T>
+     * @return
+     */
+    public static <T> List<String> setPropertyList(List<T> list, Map<String, String> map) {
+        return setPropertyList(list, "name", "standName", map);
+    }
+
     /**
      * 循环向上转型, 获取对象的 DeclaredField
      * @param object : 子类对象
@@ -100,22 +135,56 @@ public class CoreUtil {
         return null;
     }
 
+    /**
+     * 直接设置对象属性值, 忽略 private/protected 修饰符, 也不经过 setter
+     * @param object : 子类对象
+     * @param name : 父类中的属性名
+     * @param standName : 要替换的属性名
+     * @param value : 将要设置的值
+     */
+
+    public static void setFieldValue(Object object, String name, String standName, Map<String, String> value){
+
+        //根据 对象和属性名通过反射 调用上面的方法获取 Field对象
+        Field field = getDeclaredField(object, name) ;
+
+        //抑制Java对其的检查
+        field.setAccessible(true) ;
+
+        try {
+            //将 object 中 field 所代表的值 设置为 value
+            String key = (String)field.get(object);
+            if (value != null && value.get(key) != null) {
+                Field standField = getDeclaredField(object, standName) ;
+                standField.setAccessible(true) ;
+                standField.set(object, value.get(key));
+            }
+        } catch (IllegalArgumentException e) {
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
     public static void main(String[] args) {
         List<Clinical> clinicals = new ArrayList<>();
         Clinical c1 = new Clinical();
-        c1.setName("ddd");
+        c1.setName("a");
         clinicals.add(c1);
         Clinical c2 = new Clinical();
-        c2.setName("ddd");
+        c2.setName("b");
         clinicals.add(c2);
         Clinical c3 = new Clinical();
-        c3.setName("ddd");
+        c3.setName("c");
         clinicals.add(c3);
 
-        List<General> generalLabelList = new ArrayList<>();
-        General g1 = new General();
-        g1.setName("ab");
-        generalLabelList.add(g1);
-        System.out.println(getPropertyList(generalLabelList));
+        System.out.println(getPropertyList(clinicals));
+        Map<String, String> map = new HashMap<>();
+        map.put("a", "A");
+        map.put("b", "B");
+
+        setPropertyList(clinicals, map);
     }
 }