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) {
equals()方法BeanWrapper beanWrapper = new BeanWrapperImpl(t);
Object value = PropertyValue(argumentName);
if ((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 (PropertyValue(argumentName) == null) {
throw new RuntimeException("argumentName is null");
}
resultMap.PropertyValue(argumentName), t);
}
return resultMap;
}
依据⾃⼰的业务需求,⾃⾏选择。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论