package com.temobi.cds.tool;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.commons.beanutils.PropertyUtils;
import com.temobi.portal.dto.SiteFavoriteDto;
/**
* 集合工具类
*
* @author lixu
*
* @param <V>
*/
public class CollectionUtil<V> {
/**
* 比较两个集合
*
* @param set1
* @param set2
* @return
*/
public boolean compare(Collection<V> set1, Collection<V> set2) {
if (set1 == null || set2 == null) {
return false;
}
if (set1.size() != set2.size()) {
return false;
}
for (V s : set1) {
if (!set2.contains(s)) {
return false;
}
}
return true;
}
private static boolean eq(Object a, Object b) {
return a == b ? true : (a != null && b != null && a.equals(b) ? true : false);
}
/**
* 比较两个集合是否相等, 包括比较两个集合的大小, 集合内对象是否相等(通过equals()和hashCode())方法).
* 如果两个集合相等, 返回true, 否则返回false.<br>
*
* 如果指定了集合内对象的属性名(由fieldNames属性指定), 那么也将比较这些属性名是否相等. 当指定的某个属性名
* 不存在或者两个对象的某个属性的值不相等, 返回false
* @param set1
* @param set2
* @param fieldNames
* @return
*/
public boolean compare(Collection set1, Collection set2, String... fieldNames) {
if (set1 == set2)
return true;
if ((set1 == null && set2 != null) || (set1 != null && set2 == null)) {
return false;
}
if (set1.size() != set2.size()) {
return false;
}
// to map for fast indexing
Map m = new HashMap(set2.size());
for (Object t : set2) {
m.put(t, t);
}
for (Object obj1 : set1) {
Object obj2 = m.get(obj1);
if (obj2 == null) {
return false;
}
if (fieldNames != null && fieldNames.length > 0) {
for (String field : fieldNames) {
try {
Object v1 = PropertyUtils.getProperty(obj1, field);
Object v2 = PropertyUtils.getProperty(obj2, field);
if (!eq(v1, v2))
return false;
} catch (Exception e) {
// some field does not exist, we can not compare, return
// false
return false;
}
}
}
}
return true;
}
/*public static void main(String[] args) {
SiteFavoriteDto f1 = new SiteFavoriteDto();
f1.setId("1");
f1.setOrderSeq(1);
SiteFavoriteDto f2 = new SiteFavoriteDto();
f2.setId("2");
f2.setOrderSeq(2);
Set<SiteFavoriteDto> set1 = new HashSet<SiteFavoriteDto>();
set1.add(f1);
set1.add(f2);
SiteFavoriteDto p1 = new SiteFavoriteDto();
p1.setId("1");
p1.setOrderSeq(1);
SiteFavoriteDto p2 = new SiteFavoriteDto();
p2.setId("2");
p2.setOrderSeq(2);
Set<SiteFavoriteDto> set2 = new HashSet<SiteFavoriteDto>();
set2.add(p1);
set2.add(p2);
CollectionUtil<SiteFavoriteDto> u = new CollectionUtil<SiteFavoriteDto>();
System.out.println(u.compare(set1, set2, "id", "ordera"));
}*/
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交