package com.ycsoft.commons.helper; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; import com.ycsoft.beans.prod.PPromFeeProd; /** * 集合辅助类,包含Java三大集合的处理 * * @author hh * @date Dec 3, 2009 1:25:11 PM */ public class CollectionHelper { private CollectionHelper() {} /** * 将给定的属性名称propertyName,在数据集中查询对应的JavaBean属性值, * 将属性值相等的放入新的List ,并添加至Map中。以属性值为map的key值 * @param <T> * @param data 数据源 * @param keyName 作为主键的属性名称 * @return */ public static <T> Map<String, List<T>> converToMap(List<T> data, String... propertyName) throws Exception { Map<String, List<T>> map = new HashMap<String, List<T>>(); if (data == null){ return map ; } for (int i = 0; i < data.size(); i++) { T obj = data.get(i); String key = ""; for (String p : propertyName) { String value =BeanUtils.getProperty(obj, p); value=value==null?"null":value; key += value+"_"; } key = key.substring(0, key.length()-1); List<T> list = map.get(key); if (list == null){ list = new ArrayList<T>(); map.put(key, list); } list.add(obj); } return map; } /** * 将给定的属性名称propertyName,在数据集中查询对应的JavaBean属性值, * 将属性propertyName的值作为key,并添加至Map中。propertyName应唯一,否则会出现数据覆盖 * @param <T> * @param data 数据源 * @param keyName 作为主键的属性名称 * @return */ public static <T> Map<String, T> converToMapSingle(List<T> data, String... propertyName) throws Exception { Map<String, T> map = new HashMap<String, T>(); if (data == null) { return map; } for (int i = 0; i < data.size(); i++) { T obj = data.get(i); String key = ""; for (String p : propertyName) { String value =BeanUtils.getProperty(obj, p); value=value==null?"null":value; key += value+"_"; } key = key.substring(0, key.length()-1); map.put(key, obj); } return map; } /** * 在给定的数据集中,将每个Map的key与实体类属性名称一致的进行拷贝, * 支持更深度的拷贝,如实体类中包含另一个JavaBean属性也会进行同样的拷贝。 * * @param <T> 实体类 * @param data 数据集 * @param entityCls 实体类的class * @return 转化之后的List */ public static <T> List<T> converToEntity(List<Map<String,Object>> data ,Class<T> entityCls) throws InstantiationException, IllegalAccessException, InvocationTargetException { List<T> target = new ArrayList<T>(); //检查是否有需要转化的数据 if( null == data || data.size() == 0){ return target; } Map<String, Class> complex = BeanHelper.getSimpleOrComplexProperty( entityCls , false); T temp = null; Object sb = null; String sbpn = null; for (Map<String, Object> map : data) { clearNullElement( map ); temp = entityCls.newInstance(); //将Map对应的实体类简单属性值进行拷贝 BeanUtils.populate( temp , map); Iterator<String> ite = complex.keySet().iterator(); while(ite.hasNext()){ sbpn = ite.next(); sb = complex.get( sbpn ).newInstance(); BeanUtils.populate( sb , map); BeanUtils.setProperty(temp, sbpn, sb); } target.add( temp ); } return target; } /** * <p> 清空Map中元素值为NULL的元素 </p> */ public static void clearNullElement(Map map){ if(map == null) return ; Object [] vs = map.keySet().toArray(); for (Object o : vs) { if(null == map.get(o)) map.remove(o); } } public static List<String> converValueToList(List<?> datas, String propertyName) throws Exception { List<String> result = new ArrayList<String>(); if (datas == null||datas.size()==0) return result; for (Object o : datas) { String v = BeanUtils.getProperty(o, propertyName); if (StringHelper.isNotEmpty(v)) result.add(v); } return result; } public static String[] converValueToArray(List<?> datas, String propertyName) throws Exception { List<String> result = new ArrayList<String>(); for (Object o : datas) { String v = BeanUtils.getProperty(o, propertyName); if (StringHelper.isNotEmpty(v)) result.add(v); } return result.toArray(new String[result.size()]); } public static<T> void setValues(List<T> datas, String propertyName, String value) throws IllegalAccessException, InvocationTargetException { for (T o : datas) { BeanUtils.setProperty(o, propertyName, value); } } /** * * @return 1 a包含b * 0 互不包含 * -1 b包含a */ public static int compare(List<String> a,List<String> b){ if(a.size() == 0 || b.size() == 0){ return 0; } if (a.size()<=b.size()){ for (String x:a){ boolean z=false; for (String y:b){ if (x.equals(y)){ z=true; break; } } if (!z) return 0; } return -1; } else { for (String x:b){ boolean z=false; for (String y:a){ if (x.equals(y)){ z=true; break; } } if (!z) return 0; } return 1; } } /** * 判断集合是否为空(等于null 或者 isEpty). * @param list * @return */ public static boolean isEmpty(Collection<? extends Object> list) { return list == null || list.isEmpty(); } /** * 判断集合是否<font color ="red">不为空</font>(等于null 或者 isEpty). * @param list * @return */ public static boolean isNotEmpty(Collection<? extends Object> list) { return !isEmpty(list); } }