集合工具类

 
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"));
	}*/
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值