实际开发中,经常会遇到要对List集合中对象进行去重、判重操作;此处将使用Java8新特性来进行操作。
可以用的方法为:
-
testlist.stream().anyMatch
-
testlist.stream().filter
1、去重
代码:
public static void main(String[] args) {
Map map1=new HashMap();
Map map2=new HashMap();
Map map3=new HashMap();
map1.put("name","Jam");
map1.put("age","20");
map2.put("name","Jam");
map2.put("age","20");
map3.put("name","Jam");
map3.put("age","20");
List testList=new ArrayList();
testList.add(map1);
testList.add(map2);
testList.add(map2);
System.out.println("去重前");
System.out.println(testList);
//java8去重
testList= (List) testList.stream().distinct().collect(Collectors.toList());
System.out.println("去重后");
System.out.println(testList);
}
2、判重
public static void main(String[] args) {
List<Map<String,Object>> testlist=new ArrayList<>();
Map map1=new HashMap();
Map map2=new HashMap();
map1.put("name","小明");
map1.put("age","20");
map2.putAll(map1);
map2.put("key","6661");
testlist.add(map2);
//判断集合对象属性中是否已经包含对象的某个属性
//多个属性合并判断
boolean result=testlist.stream().anyMatch(m -> m.get("name").equals(map1.get("name"))&&m.get("age").equals(map1.get("age")));
//单个属性判断
boolean result2=testlist.stream().filter(m->m.get("name").equals(map1.get("name"))).findAny().isPresent();
System.out.println(result);
System.out.println(result2);
//返回找到的相同属性的map
Map checkMap=testlist.stream().filter(m->m.get("name").equals("小明")).findAny().get();
System.out.println(checkMap);
}
执行结果