zoukankan      html  css  js  c++  java
  • Java 多字段排序Comparator(兼容Date,Integer,Doubel,Long)

    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()));
            }
        }
    }
    
    
    


  • 相关阅读:
    MySQL高可用架构之MHA
    DateTimeFormatter
    mysql实现行拼接、列拼接
    图形数据库 Neo4j 开发实战
    除了信号触发线程与接收者线程相同的情况能直接调用到slot,其它情况都依赖事件机制(解决上面代码收不到信号的问题其实很简单,在线程的run();函数中添加一个事件循环就可以了,即加入一句exec();),信号槽不就是一个回调函数嘛
    moveToThread的根本目的还是为了处理QObject的事件循环(如果为空指针的话,当前对象的所有的事件都不处理了),看官方说明就知道了
    专访紫光刁石京:资本追逐下产业“过热” 人才培养需塌下心(企业这么多年好不容易积累起来的人才队伍,被别人这么一挖,一切付诸东流)
    为QML创建C++插件(下载)
    Qt Quick Controls 与 Qt Quick Controls 2的区别(详细对照)
    asp.net core zipkin
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5326993.html
Copyright © 2011-2022 走看看