zoukankan      html  css  js  c++  java
  • Comparator分组测试

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
        
    /**
     * @author 马家立
     * @version 创建时间:2019年9月18日
     * @Description:TODO Comparator分组测试
     */
    public class ComparatorGroup {
        class Nubia {
            public String name;// 手机名称
            public String color;// 颜色
            public int weight;// 重量
    
            public Nubia(String name, String color, int weight) {
                super();
                this.name = name;
                this.color = color;
                this.weight = weight;
            }
    
            @Override
            public String toString() {
                return "Nubia [name=" + name + ",color=" + color + "色, weight=" + weight + "g]";
            }
        }
    
        /**
         * @Title:divider
         * @author:马家立
         * @date:2019年9月17日
         * @Description:TODO 按条件分组
         * @param <T>
         * @param datas_待分组的数据List
         * @param condition_是否为同一组的判断条件
         * @return List<List<T>>
         */
        public static <T> List<List<T>> divider(Collection<T> datas, Comparator<? super T> condition) {
            // 初始化话分组List<List<T>>
            List<List<T>> result = new ArrayList<List<T>>();
            // 是否为同一组数据的标识
            boolean isSameGroup = false;
            // 遍历待分组的完整List数据
            for (T data : datas) {
                isSameGroup = false;
                for (int j = 0; j < result.size(); j++) {
                    if (condition.compare(data, result.get(j).get(0)) == 0) {
                        isSameGroup = true;
                        result.get(j).add(data);
                        break;
                    }
                }
                if (!isSameGroup) {
                    // 创建分组List
                    List<T> groupList = new ArrayList<T>();
                    result.add(groupList);
                    groupList.add(data);
                }
            }
            return result;
        }
    
        /**
         * @Title:sortListNubia
         * @author:马家立
         * @date:2019年9月17日
         * @Description:TODO 对分组的List按重量升序排列
         * @param sortNubia待排序的List
         *            void
         */
        public static void sortListNubia(List<List<Nubia>> sortNubia) {
            // 对分组的List按重量升序排列
            Comparator<List<Nubia>> comparator = new Comparator<List<Nubia>>() {
                @Override
                public int compare(List<Nubia> nb1, List<Nubia> nb2) {
                    return nb1.get(0).weight - nb2.get(0).weight;
                }
            };
            Collections.sort(sortNubia, comparator);
        }
    
        /**
         * @Title:main
         * @author:马家立
         * @date:2019年9月17日
         * @Description:TODO main函数测试
         * @param args
         *            void
         */
        public static void main(String[] args) {
            // 初始化List数据
            List<Nubia> list = new ArrayList<>();
            list.add(new ComparatorGroup().new Nubia("努比亚z7mini", "黑金", 143));
            list.add(new ComparatorGroup().new Nubia("努比亚z11mini", "黑金", 138));
            list.add(new ComparatorGroup().new Nubia("努比亚红魔Mars", "黑红", 193));
            list.add(new ComparatorGroup().new Nubia("努比亚红魔3 ", "黑红", 215));
            list.add(new ComparatorGroup().new Nubia("努比亚X", "蓝银", 181));
            list.add(new ComparatorGroup().new Nubia("努比亚布拉格 ", "蓝银", 140));
            // 按颜色分组
            List<List<Nubia>> byColors = divider(list, new Comparator<Nubia>() {
                @Override
                public int compare(Nubia nb1, Nubia nb2) {
                    // 按颜色分组
                    return nb1.color.compareTo(nb2.color);
                }
            });
            // 按重量升序
            sortListNubia(byColors);
            System.out.println("按颜色分组:");
            for (List<Nubia> list2 : byColors) {
                System.out.println(list2);
            }
            // 按重量分组
            List<List<Nubia>> byWeight = divider(list, new Comparator<Nubia>() {
                @Override
                public int compare(Nubia nb1, Nubia nb2) {
                    // 按重量区间
                    return ((nb1.weight / 30) == (nb2.weight / 30)) ? 0 : 1;
                }
            });
            // 按重量升序
            sortListNubia(byWeight);
            System.out.println("按重量级分组:");
            for (List<Nubia> list2 : byWeight) {
                System.out.println(list2);
            }
        }
    }

    运行结果:

    按颜色分组:
    [Nubia [name=努比亚z7mini,color=黑金色, weight=143g], Nubia [name=努比亚z11mini,color=黑金色, weight=138g]]
    [Nubia [name=努比亚X,color=蓝银色, weight=181g], Nubia [name=努比亚布拉格 ,color=蓝银色, weight=140g]]
    [Nubia [name=努比亚红魔Mars,color=黑红色, weight=193g], Nubia [name=努比亚红魔3 ,color=黑红色, weight=215g]]
    按重量级分组:
    [Nubia [name=努比亚z7mini,color=黑金色, weight=143g], Nubia [name=努比亚z11mini,color=黑金色, weight=138g], Nubia [name=努比亚布拉格 ,color=蓝银色, weight=140g]]
    [Nubia [name=努比亚红魔Mars,color=黑红色, weight=193g], Nubia [name=努比亚X,color=蓝银色, weight=181g]]
    [Nubia [name=努比亚红魔3 ,color=黑红色, weight=215g]]
  • 相关阅读:
    深入探索 高效的Java异常处理框架
    Java多线程调试如何完成信息输出处理
    WebKit学习资源
    WebKit阅读起步
    Redis学习资源
    webkit在vs2008中编译
    【转】推荐几本学习MySQL的好书-MySQL 深入的书籍
    Mysql: 开启慢查询日志[ERROR] unknown variable 'log-slow-queries'处理办法
    Linux top命令详解
    eclipse svn同步过滤掉某些不需要同步的文件
  • 原文地址:https://www.cnblogs.com/mjtabu/p/11543602.html
Copyright © 2011-2022 走看看