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