1. 程式人生 > >java 物件屬性比較工具類

java 物件屬性比較工具類

package com.zxy.product.human.web.log;


import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;


import com.google.common.collect.Maps;
/**
 * BeanUtil 物件屬性比較工具類
 * @author zzg
 * 
 **/
public class BeanUtil {


    public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        // TODO Auto-generated method stub
        BeanUtil util = new BeanUtil();
        //excel 讀取資料
        Person excel = util.new Person();
        excel.setId("1");
        excel.setAge("18");
        excel.setName("知學雲1");


        //database 讀取資料
        Person database = util.new Person();
        database.setId("1");
        database.setAge("16");
        database.setName("知學雲");










       Map<String,Map<String,Object>> map = util.getMap(excel);
        //遍歷map
//        for (Map.Entry<String,Object> entry : map.entrySet()) {
//            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
//        }
        boolean flag = util.getFieldEqual(database, map);
        System.out.println("屬性值是否發生改變:"+ flag);


        Map<String,Map<String,Object>> fields = util.getFieldUpdate(database, map);
        Map<String,Object> c = fields.get(database.getId());
        for (Map.Entry<String,Object> entry : c.entrySet()) {
          System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
      }


    }
    // 指定Bean物件 關聯屬性轉換為Map
    public Map<String,Map<String,Object>> getMap(Person object) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
        Map<String,Map<String,Object>> obj = new HashMap<String,Map<String,Object>>();


        Map<String,Object> map = Maps.newHashMap();
        Class<?> cls = object.getClass();
        Field[] fields = cls.getDeclaredFields();
        for(Field field : fields){
            Object value = getFieldValue(object, field.getName());
            String key = field.getName();
            map.put(key, value);
        }


        obj.put(object.getId(), map);
        return obj;
    }
    // Bean 關聯屬性轉換為Map
    public Map<String,Object> getMapProperties(Person object) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
        Map<String,Object> map = Maps.newHashMap();
        Class<?> cls = object.getClass();
        Field[] fields = cls.getDeclaredFields();
        for(Field field : fields){
            Object value = getFieldValue(object, field.getName());
            String key = field.getName();
            map.put(key, value);
        }
        return map;
    }
    // 獲取指定Field 屬性值
    public Object getFieldValue(Object obj, String fieldName) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
        Class<?> cls = obj.getClass();
        Object value = null;
        Field field = cls.getDeclaredField(fieldName);;
        field.setAccessible(true);
        value = field.get(obj);
        return value;
    }


    //判斷指定物件的屬性值是否相等
    public boolean getFieldEqual(Person object, Map<String,Map<String, Object>> map) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
        boolean flag = false;
        Class<?> cls = object.getClass();
        Field[] fields = cls.getDeclaredFields();
        if(map.containsKey(object.getId())){
            Map<String, Object> content = map.get(object.getId());
            for(Field field : fields){
                Object excel = content.get(field.getName());
                Object database = getFieldValue(object,field.getName());
                if(excel == null && database == null){
                    flag = false;
                }else if(excel != null && database == null){
                    flag = true;
                    break;
                }else if(excel == null && database != null){
                    flag = true;
                    break;
                }else if(excel != null && database != null){
                    if(excel.equals(database)){
                        flag = false;
                    }else{
                        flag = true;
                        break;
                    }
                }


            }
        }
        return flag;
    }


    // 返回匹配物件修改的屬性值
    public  Map<String,Map<String,Object>> getFieldUpdate(Person object, Map<String,Map<String, Object>> map) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{


        Map<String,Map<String,Object>> result =new HashMap<String,Map<String,Object>>();
        Class<?> cls = object.getClass();
        Field[] fields = cls.getDeclaredFields();
        Map<String, Object> content = map.get(object.getId());
        if(map.containsKey(object.getId())){
            Map<String,Object> f = new HashMap<String,Object>();
            for(Field field : fields){
                Object excel = content.get(field.getName());
                Object database = getFieldValue(object,field.getName());
                //屬性值判斷:四種情況
                if(excel != null && database!= null){
                    if(!excel.equals(database)){
                        f.put(field.getName(), excel);
                     }
                }else if(excel == null && database == null){
                }else if(excel != null && database == null){
                        f.put(field.getName(), excel);
                }else if(excel == null && database != null){
                        f.put(field.getName(), null);
                }


            }
            result.put(object.getId(), f);
        }


        return result;
    }


    public class Person{
        private String id;
        private String name;
        private String age;
        private String sex;


        public String getId() {
            return id;
        }


        public void setId(String id) {
            this.id = id;
        }




        public String getName() {
            return name;
        }


        public void setName(String name) {
            this.name = name;
        }


        public String getAge() {
            return age;
        }


        public void setAge(String age) {
            this.age = age;
        }


        public String getSex() {
            return sex;
        }


        public void setSex(String sex) {
            this.sex = sex;
        }




    }


}

相關推薦

java 物件屬性比較工具

package com.zxy.product.human.web.log; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import com.google.

javax.xml + java.io xml和java物件互轉工具

import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshall

JSON與Java物件互轉 工具

話不多說,上程式碼~import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier;

Java讀取資原始檔下的屬性檔案工具

package com.euler.server.app.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.FileNotFoundException; import java.io.IO

Java中自定義物件使用Collections工具中的Sort方法

Collections工具類中的sort方法有兩種形式: (1) sort(List<T> list) (2) sort(List<T> list, Comparator<? super T> c) 第一種方法中List型別的物件必須實現Comparable介面,此外,

java 屬性拷貝工具

import java.lang.reflect.Method; import java.util.Arrays; import java.util.Collection; import java.util.List; /** * 屬性拷貝的 工具類

WordUtil java導出word工具

tac 生成word marker ger imp port chm 下載 ram import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.Buffere

HttpUtils.java 網絡下載工具

arr tle sys 字節數 stream ati reat package you package Http;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.I

Java學習關於隨機數工具--Random

整數 boolean 下一個 構造 第一個 產生 byte cell 指定   Random類是偽隨機數生成器。之所以稱為偽隨機數(pseudorandom),是因為它們只是簡單的均勻分布序列。Random類定義了以下構造函數:     Random()     Rando

Java 通過Xml導出Excel文件,Java Excel 導出工具Java導出Excel工具

public emp cep sdf value 提交 bsp datetime rtm Java 通過Xml導出Excel文件,Java Excel 導出工具類,Java導出Excel工具類 ============================== ?Copyri

java Int數據工具

byte ++ res data 字節數組 pub urn 轉換成 ava  1、在使用tcp協議傳輸數據時,使用到的 Int 數據的工具類方法   //將 Int 數據轉換成字節數組   public static byte[] intToByteArray(int da

電商商品規則屬性sku 工具

數據 box .get fin val type float lin use /** * 商品模塊; * 使用:var SKU = sku.init({ id:‘sku‘, item: item, data:data }); * @config item =

Java 中的Array工具

查詢 bool als 二分 對數 score 對象 int 定義 1、boolean equals(array1,array2):比較兩個數組是否相等。import java.util.Arrays;public class Ch03 { public static vo

Java時間格式轉換工具

string stact 修改 stack time mil 日期格式轉換 pla gettime 把當前時間修改成指定時間 //把當前時間修改成指定時間 public String dateUtil(Integer seconds, String dateFo

java 分庫關聯查詢工具

      問題:   由於公司業務擴大,各個子系統陸續遷移和部署在不同的資料來源上,這樣方便擴容,但是因此引出了一些問題。   舉個例子:在查詢"訂單"(位於訂單子系統)列表時,同時需要查詢出所關聯的"使用者"(位於賬戶子系統)的姓名,而這時由於資料儲存在不同的資料來源上,

Java併發程式設計的藝術之八----java中的併發工具

1.等待多執行緒完成的countDownLatch CountDownLatch允許一個或多個執行緒等待其他執行緒完成操作。 執行緒中,讓一個執行緒等待最簡單的做法是使用join方法,執行緒A中呼叫B.join方法,說明讓執行緒A等待執行緒B完成之後再執行。 實現原理:不停檢查執行緒是否

JAVA資原始檔操作工具

package com.kkmall.risk.common.utils; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import jav

java位元組字元轉換工具

該工具類作用是位元組,字元陣列的相互轉換(避免重複造輪子),分享給大家 public class ConvertUtil {     /**      * 位元組陣列轉16進位制字串    &

Java操作Date的工具

import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar;

java讀取.txt檔案工具FileUtiles

public class FileUtils { private static final String ENCODING = "UTF-8";//編碼方式 /** * 獲取檔案的行 * * @param file