亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

利用Set 對List<Map<String,Object>> 中的map對象中某一個屬性去重

標簽:
Java
public static void main(String[] args) {//需求:根据List<Map<String,Object>> 的map中name 属性相同去重/////////////////////////////////////////////以下为造数据/////////////////////////////////////////////////////////////////////////////////////////
          //创建数据,对根据姓名 name 去重
          List<Map<String,Object>>  allList = new ArrayList<>();
          List<Map<String,Object>>  smallList = new ArrayList<>();          Map<String,Object> map1 = new HashMap<>();

          map1.put("id",2019);
          map1.put("name","小明");
          map1.put("id",2017);
          map1.put("name","小王");          Map<String,Object> map2 = new HashMap<>();
          map2.put("id",2020);
          map2.put("name","小明");

          allList.add(map1);
          allList.add(map2);
          smallList.add(map2);/////////////////////////////////////////////以上为造数据/////////////////////////////////////////////////////////////////////////////////////////

          /*将list map 转list pojo,必须要转成对象,因为要去重某一个属性值,而不是去重整个对象,所以必须重写 这个属性值的hashcode 和equals 值*/ 
          List<U> list1 = jsonToList(JSONArray.fromObject(allList).toString(),U.class);
          List<U> list2 = jsonToList(JSONArray.fromObject(smallList).toString(),U.class);          Set<U> set = new HashSet<>();
          set.addAll(list1);
          set.addAll(list2);          for (U u :set){
               System.out.println(u.getName());
          }
     }

运行结果:


webp

image.png

public static   class  U {          private  Integer id;          private  String name;          public Integer getId() {               return id;
          }          public void setId(Integer id) {               this.id = id;
          }          public String getName() {               return name;
          }          public void setName(String name) {               this.name = name;
          }          /**必须重写hashcode 和 equals 方法 */
          @Override
          public int hashCode() {               return name.hashCode(); // 重写此属性值的hashcode,不然就是判断这个对象的hashcode
          }          @Override
          public boolean equals(Object obj) {               if (obj instanceof  U){
                    U o = (U)obj;                    if (o.getName().equals(name)){ //根据属性值进行判断
                         return true;
                    }
               }               return super.equals(obj);
          }
     }
   /**
     * 将json数据转换成pojo对象list
     */
    public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
        JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);        try {            List<T> list = MAPPER.readValue(jsonData, javaType);            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }        return null;
    }
         Set<U> set1 = new HashSet<>();         Set<U> set2 = new HashSet<>();

          set1.addAll(list1);//小王、小明
          set2.addAll(list2);//小明、小哥
          set2.retainAll(set1); //求交集
          set1.addAll(set2); //求并集
          set1.removeAll(set2); //求差集



作者:南京杨小兵
链接:https://www.jianshu.com/p/bbca829654cb


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消