集合工具类
来源:互联网 发布:除了暴风影音知乎 编辑:程序博客网 时间:2024/06/18 07:03
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 indexingMap 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// falsereturn 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"));}*/}