两种方法:
1.集合相减可以使用阿帕奇的一个ListUtils.subtract(list1,list2)方法,这种方法实现必须重写集合中对象的属性的hashCode和equals方法,集合相减判断的会调用equals方法,
这种方法的好处是可以重写多个属性的hashCode和equals方法,也就是说用阿帕奇集合相减比较多个属性的比较灵活多样。带来的问题也比较明显,重写hashCode和equals方法后,
在使用hashMap时要特别注意。
2.自己实现一个集合相减的方法。用hashMap实现 这种方法不需要重写hashCode和equals方法,但是只能对一个属性进行比较相减。 /**
* 依据集合元素的属性,从list1中减去list2中存在的元素,
*
* @param list1
* @param list2
* @param argumentName
* @return
*/
public static <T> List<T> subtractList(List<T> list1, List<T> list2, String argumentName) {
List<T> result = new ArrayList<T>();
if (CollectionUtils.isEmpty(list1)) {
return result;
}
if (CollectionUtils.isEmpty(list2)) {
return list1;
}
Map<Object, T> map = initMap(list2, argumentName);
for (T t : list1) {
BeanWrapper beanWrapper = new BeanWrapperImpl(t);
Object value = beanWrapper.getPropertyValue(argumentName);
if (map.get(value) == null) {
result.add(t);
}
}
return result;
} private static <T> Map<Object, T> initMap(List<T> list2, String argumentName) {
Map<Object, T> resultMap = new HashMap<Object, T>(list2.size());
for (T t : list2) {
BeanWrapper beanWrapper = new BeanWrapperImpl(t);
if (beanWrapper.getPropertyValue(argumentName) == null) {
throw new RuntimeException("argumentName is null");
}
resultMap.put(beanWrapper.getPropertyValue(argumentName), t);
}
return resultMap;
} 依据自己的业务需求,自行选择。

最新文章

  1. new Array(n) 的坑 密集数组和稀疏数组
  2. 7月10日——[HouseStark] 扬帆起航--第一次会议
  3. 对​O​p​e​n​C​V​直​方​图​的​数​据​结​构​C​v​H​i​s​t​o​g​r​a​m​的​理​解
  4. windows脚本配置ip地址
  5. Winfrom实现圆角设计
  6. [原创]Java中的字符串比较,按照使用习惯进行比较
  7. PMP考试--成本管理中常用的概念
  8. 浏览器操作html页面的width和height
  9. Java基础系列--07_String、StringBuffer和StringBuilder
  10. 你不知道的CSS
  11. kvm虚拟机网络管理
  12. centos7下安装docker(17.1docker监控---sysdig)
  13. WEB应用支持RESTFUL风格方法
  14. (转) eclipse项目中.classpath文件详解
  15. tp5.1 错误 No input file specified.
  16. flume hdfs一些简单配置记忆
  17. Java中的网络编程-3
  18. SDKMAN 软件开发工具包管理器
  19. MySql数据快速导入
  20. c语言单元测试框架--CuTest

热门文章

  1. 【LeetCode 】N皇后II
  2. 微信小程序手绘地图实现之《Canvas》
  3. iOS下JS与原生的交互二
  4. NRF24L01中断双向传输数据
  5. 11. react 基础 使用charles 模拟接口数据
  6. 2020牛客寒假算法基础集训营5 G街机争霸
  7. MySQL数据库索引常见问题
  8. SQL基础教程(第2版)第1章 数据库和SQL:练习题
  9. PAT Advanced 1102 Invert a Binary Tree (25) [树的遍历]
  10. UML-领域模型的精化