Java 杂谈JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统

利用Set 对List<Map<String,Obj

2018-08-30  本文已影响4人  南京杨小兵
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());
          }
     }

运行结果:


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); //求差集
上一篇下一篇

猜你喜欢

热点阅读