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]]

猜你喜欢

转载自www.cnblogs.com/mjtabu/p/11543602.html
今日推荐