Java依据集合元素的属性,集合相减

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java依据集合元素的属性,集合相减
两种⽅法:
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;
}
依据⾃⼰的业务需求,⾃⾏选择。

相关文档
最新文档