Java集合對象比對


1. 場景描述

通過java代碼從外圍接口中獲取數據並落地,已經存在的不落地,不存在的落地,因有部分字段變化是正常的,只需比對3個字段相同即為相同。

2. 解決方案

設置定時任務(三個標簽完成springboot定時任務配置),比對接口中獲取的數據和本地落地的數據是否相同。

2.1 真實代碼

  @Scheduled(cron = "0 10 2 * * ? ")
    public void execAppUser() {
        synchronized (this) {
            JSONArray array = null;
            try {
                array = testService.getUsers();
            } catch (Exception e) {
                e.printStackTrace();
            }
            //接口獲取user
            List<AppUser> iusers = JSONObject.parseArray(array.toJSONString(), AppUser.class);
            
            List<AppUser> users = appUserService.getAllUsers();
            for (AppUser iuser : iusers) {
                if (users.contains(iuser)){
                    continue;
                }
                appUserService.insert(iuser);
            }
        }
    }

2.2 代碼說明

(1)使用users.contains(iuser),比對目前庫中是否存在從接口獲取的對象。

(2)因只比對三個字段,三個字段相同即為相同,需重寫AppUser對象的equals和hashcode

(3)Idea中Alt+insert快捷鍵調出來,選擇對應的字段就能生成對應的equals和hashCode。

(4)equals代碼

 @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AppUser appUser = (AppUser) o;
        return Objects.equals(aa, appUser.aa) &&
                Objects.equals(bb, appUser.bb) &&
                Objects.equals(cc, appUser.cc);
    }

    @Override
    public int hashCode() {
        return Objects.hash(aa, bb, cc);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM