Java 反射类:ReflexUtil
public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexUtil.class); //getMethod static public Object invokeMethod(String propertiesName, Object object) { try { if(object==null) return null; if (!propertiesName.contains(".")) { String methodName = "get"+getMethodName(propertiesName); Method method = object.getClass().getMethod(methodName); return method.invoke(object); } String methodName = "get"+getMethodName(propertiesName.substring(0,propertiesName.indexOf("."))); Method method = object.getClass().getMethod(methodName); return invokeMethod(propertiesName.substring(propertiesName.indexOf(".")+1), method.invoke(object)); } catch (Exception e) { logger.error(e.toString(), e); return null; } } private static String getMethodName(String fildeName) { byte[] items = fildeName.getBytes(); items[0] = (byte) ((char) items[0] - 'a' + 'A'); return new String(items); } public static void main(String args[]) { Video video = new Video(); Album album = new Album(); album.setAlbumId(346l); video.setAlbum(album); video.setVideoId(126l); System.out.println(ReflexUtil.invokeMethod("album.albumId", video)); } }
Java 对象排序 : CompareUtil ()
package com.gochinatv.vrs.framework.util; import com.alibaba.fastjson.JSONObject; import com.gochinatv.vrs.framework.bean.LabelAlbum; import com.gochinatv.vrs.framework.bean.Video; import java.util.*; /** * Created by shhao * Date: 14-5-6. * Time:下午4:48 */ public class CompareUtil { //sort 1正序 -1 倒序 filed 多字段排序 public static <T> Comparator createComparator(int sort, String... filed) { return new ImComparator(sort, filed); } public static class ImComparator implements Comparator { int sort = 1; String[] filed; public ImComparator(int sort, String... filed) { this.sort = sort == -1 ? -1 : 1; this.filed = filed; } @Override public int compare(Object o1, Object o2) { int result = 0; for (String file : filed) { Object value1 = ReflexUtil.invokeMethod(file, o1); Object value2 = ReflexUtil.invokeMethod(file, o2); if (value1 == null || value2 == null) { continue; } if (value1 instanceof Integer) { //Integer整数序排序 int v1 = Integer.valueOf(value1.toString()); int v2 = Integer.valueOf(value2.toString()); if (v1 == v2) continue; if (sort == 1) { return v1 - v2; } else if (sort == -1) { return v2 - v1; } } else if (value1 instanceof Date) { //Date类型排序 Date d1 = (Date) value1; Date d2 = (Date) value2; if (d1.compareTo(d2) == 0) continue; if (sort == 1) { return d1.compareTo(d2); } else if (sort == -1) { return d2.compareTo(d1); } } else if (value1 instanceof Long) { //Long排序 long v1 = Long.valueOf(value1.toString()); long v2 = Long.valueOf(value2.toString()); if (v1 == v2) continue; if (sort == 1) { return v1 > v2 ? 1 : -1; } else if (sort == -1) { return v2 > v1 ? 1 : -1; } } else if (value1 instanceof Double) { //Double排序 Double v1 = Double.valueOf(value1.toString()); Double v2 = Double.valueOf(value2.toString()); if (v1 == v2) continue; if (sort == 1) { return v1 > v2 ? 1 : -1; } else if (sort == -1) { return v2 > v1 ? 1 : -1; } } } return result; } } public static void main(String args[]) { Video label1 = new Video(); label1.setDisplayOrder(1); label1.setCreateTime(DateUtils.convert("2014-01-01")); Video label2 = new Video(); label2.setDisplayOrder(3); label2.setCreateTime(DateUtils.convert("2014-01-02")); Video label3 = new Video(); label3.setDisplayOrder(2); label3.setCreateTime(DateUtils.convert("2014-01-03")); Video label4 = new Video(); label4.setDisplayOrder(2); label4.setCreateTime(DateUtils.convert("2014-01-01")); Video label5 = new Video(); label5.setDisplayOrder(4); label5.setCreateTime(DateUtils.convert("2014-01-05")); List<Video> list = new ArrayList<Video>(); list.add(label1); list.add(label2); list.add(label3); list.add(label4); list.add(label5); Collections.sort(list, CompareUtil.createComparator(1, "createTime", "displayOrder")); for (int i = 0; i < list.size(); i++) { Video labelAlbum = list.get(i); System.out.println("displayorder:" + labelAlbum.getDisplayOrder() + " sequence:" + DateUtils.convert(labelAlbum.getCreateTime())); } } }