/** * 版本修订记录 * 创建:2012-12-6 * 版本: * * 修订1: 说明: * 修订2: 说明: */ package org.howsun.util; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Comparator; import java.util.EnumSet; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.howsun.log.Log; import org.howsun.log.LogFactory; /** * 描述: * @author howsun * @version 3.0 * Building Time 2012-12-6 * */ public class Maps { private static final Log log = LogFactory.getLog(Maps.class); public static <E extends Enum<?>> Map<String, E> uniqueIndex(EnumSet<? extends E> cls, String function){ Map<String, E> result = new HashMap<String, E>(cls.size(), cls.size()); Iterator<? extends E> es = cls.iterator(); while(es.hasNext()){ E e = es.next(); Method m = null; try { m = e.getClass().getDeclaredMethod(function); } catch (Exception e2) {} if(m == null){ try {m = e.getClass().getDeclaredMethod("get" + String.valueOf(function.charAt(0)).toUpperCase() + function.substring(1));}catch (Exception e2) {} } if(m == null){ log.info(String.format("Not found getter method of '%s' in Enum '%s'.", function, e.name())); continue; } try { Object o = m.invoke(e); if(o != null){ result.put(o.toString(), e); } } catch (Exception exc) { log.info(String.format("The '%s' of key not found in Enum '%s'.", function, e.name())); } } return result; } /** * @param h * @return * 实现对map按照value升序排序 */ @SuppressWarnings("unchecked") public static Map.Entry[] getSortedHashtableByValue(Map h) { Set<Map.Entry> set = h.entrySet(); Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]); Arrays.sort(entries, new Comparator<Map.Entry>() { public int compare(Map.Entry arg0, Map.Entry arg1) { Integer o1 = arg0.getValue().hashCode(); Integer o2 = arg1.getValue().hashCode(); return o1.compareTo(o2); } }); return entries; } }