Java 对象多字段排序 Comparator_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java 对象多字段排序 Comparator

Java 对象多字段排序 Comparator

 2014/5/7 4:09:35  twobrushes  程序员俱乐部  我要评论(0)
  • 摘要:文章来源:http://www.itnose.net/detail/6036550.html更多文章:http://www.itnose.net/type/1.htmlJava反射类:ReflexUtilpublicclassReflexUtil{staticLoggerlogger=LoggerFactory.getLogger(ReflexUtil.class);//getMethodstaticpublicObjectinvokeMethod(StringpropertiesName
  • 标签:Java

文章来源:http://www.itnose.net/detail/6036550.html
更多文章:http://www.itnose.net/type/1.html

Java 反射类:ReflexUtil

?

class="sycode">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

?

?

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) || !(value1 instanceof Integer)) {
                    continue;
                }
                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 {
                    continue;
                }
            }
            return result;
        }
    }

   ?public static void main(String args[]) {
? ? ? ? LabelAlbum label1 = new LabelAlbum();
? ? ? ? label1.setLabelId(1); label1.setSequnces(1);
? ? ? ? LabelAlbum label2 = new LabelAlbum();
? ? ? ? label2.setLabelId(1);label2.setSequnces(2);
? ? ? ? LabelAlbum label3 = new LabelAlbum();
? ? ? ? label3.setLabelId(3); label3.setSequnces(4);
? ? ? ? LabelAlbum label4 = new LabelAlbum();
? ? ? ? label4.setLabelId(3);label4.setSequnces(3);
? ? ? ? LabelAlbum label5 = new LabelAlbum();
? ? ? ? label5.setLabelId(4);label5.setSequnces(2);
? ? ? ? List<LabelAlbum> list = new ArrayList<LabelAlbum>();
? ? ? ? list.add(label1);
? ? ? ? list.add(label2);
? ? ? ? list.add(label3);
? ? ? ? list.add(label4);
? ? ? ? list.add(label5);
? ? ? ? Collections.sort(list, CompareUtil.createComparator(1, "labelId","sequnces"));
? ? ? ? for (int i = 0; i < list.size(); i++) {
? ? ? ? ? ? LabelAlbum labelAlbum=list.get(i);
? ? ? ? ? ? System.out.println("labelId:"+labelAlbum.getLabelId()+" ?sequence:"+labelAlbum.getSequnces());
? ? ? ? }
? ? }
}
对象,排序,comparator,java,字段0

?

?

发表评论
用户名: 匿名