首页 > 其他 > 详细

对List<Map>里的map的某个属性重复的值进行处理的方法

时间:2019-07-29 00:25:06      阅读:184      评论:0      收藏:0      [点我收藏+]
package top.dszy.test.java8;


import java.util.*;
import java.util.stream.Collectors;

public class Test1 {

    public static void main(String[] args) {

        List<LinkedHashMap<String,Object>> list = new ArrayList<>();
        list.add(new LinkedHashMap<String, Object>(){{
            put("id","a");
            put("age","13");
            put("sex","男");
        }});
        list.add(new LinkedHashMap<String, Object>(){{
            put("id","a");
            put("age","14");
            put("sex","男");
        }});
        list.add(new LinkedHashMap<String, Object>(){{
            put("id","b");
            put("age","14");
            put("sex","男");
        }});
        list.add(new LinkedHashMap<String, Object>(){{
            put("id","c");
            put("age","14");
            put("sex","男");
        }});
        list.add(new LinkedHashMap<String, Object>(){{
            put("id","");
            put("age","14");
            put("sex","男");
        }});
        list.add(new LinkedHashMap<String, Object>(){{
            put("id","c");
            put("age","14");
            put("sex","男");
        }});


        handleRepeatPrimaryKey(list,"id");
        List<LinkedHashMap<String,Object>> hasList = new ArrayList<>();
        hasList =  list.stream().filter(x -> !x.get("id").toString().equals("")).collect(Collectors.toList());
        List<LinkedHashMap<String,Object>> notHasList = new ArrayList<>();
        notHasList =  list.stream().filter(x -> x.get("id").toString().equals("")).collect(Collectors.toList());

        System.out.println(hasList);
        System.out.println(notHasList);



    }


    public static List<LinkedHashMap<String,Object>> handleRepeatPrimaryKey(List<LinkedHashMap<String,Object>> list,String id){
        List<LinkedHashMap<String,Object>> itemList = new ArrayList<>();
        for(LinkedHashMap<String,Object> lhm : list){
            if(itemList.size() == 0){
                itemList.add(lhm);
            }else {
                ListIterator<LinkedHashMap<String,Object>> listIterator = itemList.listIterator();
                while(listIterator.hasNext()){
                    if(listIterator.next().get(id).toString().equals(lhm.get(id).toString())){
                        lhm.put(id,"");
                    }else {
                        listIterator.add(lhm);
                    }
                }
            }
        }
        return list;
    }
}

技术分享图片

对重复主键进行处理,取第一个,剩余的主键都置空,嗯,能满足我的需求。不知道还有没有更好的方法?

对List<Map>里的map的某个属性重复的值进行处理的方法

原文:https://www.cnblogs.com/rongyao/p/11261601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!