zoukankan      html  css  js  c++  java
  • java实现交集,并集,包括对象和基本类型

    //java实现求交集,并集,包括元素为对象和基本类型,主要是利用hashMap,set不允许元素重复等特性来进行实现去重,利用反射机制来灵活配置以对象某个属性来进行去重。
    /** * Gaoxl * 求并集去重 * 基本类型和对象 * @param list1 * @param list2 * @param fieldName(用于去重的对象属性名) * @return */ public static <T> List<T> getUnion(List<T> list1,List<T> list2,String fieldName) { list1.addAll(list2); if(null != fieldName){//对象 Map<Object,T> map = new HashMap<Object, T>(); List<T> list = new ArrayList<T>(); try{ PropertyDescriptor propertyDescription = new PropertyDescriptor(fieldName, list1.get(0).getClass()); Method readMethod = propertyDescription.getReadMethod(); for(T li : list1){//根据某属性值去重 Object fieldValue = readMethod.invoke(li); map.put(fieldValue, li); } }catch(Exception e){ e.printStackTrace(); return null; } for(Object key : map.keySet()){ list.add(map.get(key)); } return list; }else{//基本类型 Set<T> set = new HashSet<>(list1); return new ArrayList<T>(set); } } /** * Gaoxl * 求交集并去重 * 基本类型和对象 * @param list1 * @param list2 * @param fieldName(用于去重的对象属性名) * @return */ public static <T> List<T> getIntersection(List<T> list1,List<T> list2,String fieldName){ List<T> result = new ArrayList<T>(); if(null != fieldName){ try{ Map<Object,T> map = new HashMap<Object, T>(); PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName, list1.get(0).getClass()); Method readMethod = propertyDescriptor.getReadMethod(); Map<Object,T> temp = new HashMap<Object, T>(); for(T li : list1){ map.put(readMethod.invoke(li), li); } for(T li : list2){ Object key = readMethod.invoke(li); if(map.containsKey(key)){ temp.put(key, li); } } for(Object key : temp.keySet()){ result.add(temp.get(key)); } }catch(Exception e){ e.printStackTrace(); return null; } }else{ Set<T> set1 = new HashSet<>(list1); Set<T> set2 = new HashSet<>(list2); for(T li : set2){ if(set1.contains(li)){//求交集 result.add(li); } } } return result; }

    //User类
    public class User{
    		private Long userId;
    		private String userName;
    		public Long getUserId() {
    			return userId;
    		}
    		public void setUserId(Long userId) {
    			this.userId = userId;
    		}
    		public String getUserName() {
    			return userName;
    		}
    		public void setUserName(String userName) {
    			this.userName = userName;
    		}
    		
    	}
    

      

    //测试类
    public class testMethod {
    	public static void main(String[] args){
    		List<String> list = new ArrayList<>();
    		list.add("1");
    		list.add("2");
    		list.add("2");
    		List<String> list2 = new ArrayList<>();
    		list2.add("2");
    		list2.add("4");
    		list2.add("5");
    		//List<String> listResult = SysUtil.getUnion(list, list2, null);
    		//System.out.println(listResult);
    		
    		List<User> list3 = new ArrayList<>();
    		User user = new User();
    		user.setUserId(2L);
    		user.setUserName("admin");
    		list3.add(user);
    		User user1 = new User();
    		user1.setUserId(2L);
    		user1.setUserName("admin2");
    		list3.add(user1);
    		User user2 = new User();
    		user2.setUserId(3L);
    		user2.setUserName("admin3");
    		list3.add(user2);
    		
    		List<User> list4 = new ArrayList<>();
    		User user3 = new User();
    		user3.setUserId(4L);
    		user3.setUserName("admin2");
    		list4.add(user3);
    		
    		User user4 = new User();
    		user4.setUserId(6L);
    		user4.setUserName("admin4");
    		list4.add(user4);
    		
    		User user5 = new User();
    		user5.setUserId(5L);
    		user5.setUserName("admin5");
    		list4.add(user5);
    		
    		//List<User> list5 = SysUtil.getUnion(list3, list4, "userId");
    		//System.out.println(list5);
    		
    		List<String> list6 = SysUtil.getIntersection(list, list2, null);
    		System.out.println(list6);
    		
    		List<User> list7 = SysUtil.getIntersection(list3, list4, "userId");
    		System.out.println(list7);
    	}
    }
    

      


      

  • 相关阅读:
    20165331 第五周学习总结
    第二次测试补做
    20165331 《Java程序设计》第四周学习总结
    2018-2019-1 20165237 《信息安全系统设计基础》第二周学习总结
    2018-2019-1 20165237 《信息安全系统设计基础》第一周学习总结
    20165237 2017-2018-2《Java程序设计》课程总结
    2017-2018-2 20165237 实验五《网络编程与安全》实验报告
    2017-2018-2 20165237 实验四《Android开发基础》实验报告
    20165237 2017-2018-2 《Java程序设计》第十周考试补做及编程题
    2017-2018-2 20165237 实验三《 敏捷开发与XP实践》实验报告
  • 原文地址:https://www.cnblogs.com/lin0/p/11941827.html
Copyright © 2011-2022 走看看