Java依据集合元素的属性,集合相减
2024-09-07 20:36:27
两种方法:
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;
} 依据自己的业务需求,自行选择。
最新文章
- new Array(n) 的坑 密集数组和稀疏数组
- 7月10日——[HouseStark] 扬帆起航--第一次会议
- 对​O​p​e​n​C​V​直​方​图​的​数​据​结​构​C​v​H​i​s​t​o​g​r​a​m​的​理​解
- windows脚本配置ip地址
- Winfrom实现圆角设计
- [原创]Java中的字符串比较,按照使用习惯进行比较
- PMP考试--成本管理中常用的概念
- 浏览器操作html页面的width和height
- Java基础系列--07_String、StringBuffer和StringBuilder
- 你不知道的CSS
- kvm虚拟机网络管理
- centos7下安装docker(17.1docker监控---sysdig)
- WEB应用支持RESTFUL风格方法
- (转) eclipse项目中.classpath文件详解
- tp5.1 错误 No input file specified.
- flume hdfs一些简单配置记忆
- Java中的网络编程-3
- SDKMAN 软件开发工具包管理器
- MySql数据快速导入
- c语言单元测试框架--CuTest