zoukankan      html  css  js  c++  java
  • 简单的集合工具类

    简单的集合工具类

    /**
     * @author yong.liu
     * @date 2020/7/27
     */
    public class CollectionAidsUtils {
    
    
        /**
         * 遍历处理方法
         * @param list
         * @param action
         * @param <T>
         */
        public static <T> void handle(List<T> list, ComsumerAction<T> action) {
            for (T t : list) {
               if(!ObjectUtils.isEmpty(t)){
                   action.handle(t);
               }
            }
        }
        /**
         * 分组工具类
         *
         * @param list
         * @return
         */
        public static <K, T> Map<K, List<T>> groupByCondition(List<T> list, GroupCondition<K, T> condition) {
            Map<K, List<T>> orgSummaryMap = new HashMap<K, List<T>>();
            for (T t : list) {
                K groupId = condition.getGroupKey(t);
                if (null == orgSummaryMap.get(groupId)) {
                    orgSummaryMap.put(groupId, new ArrayList<T>());
                }
                orgSummaryMap.get(groupId).add(t);
            }
            return orgSummaryMap;
        }
    
        /**
         * 分组工具类 并且数据可以去重
         * 但是T需要实现hashCode 和 equals方法
         *
         * @param sets
         * @param condition
         * @param <K>
         * @param <T>
         * @return
         */
        public static <K, T> Map<K, Set<T>> groupByCondition(Set<T> sets, GroupCondition<K, T> condition) {
            Map<K, Set<T>> orgSummaryMap = new HashMap<K, Set<T>>();
            for (T t : sets) {
                K groupId = condition.getGroupKey(t);
                if (null == orgSummaryMap.get(groupId)) {
                    orgSummaryMap.put(groupId, new HashSet<T>());
                }
                orgSummaryMap.get(groupId).add(t);
            }
            return orgSummaryMap;
        }
    
        /**
         * 过滤
         *
         * @param filter
         * @param <T>
         * @return
         */
        public static <T> List<T> collect(Collection<T> collection, FilterCondition<T> filter) {
            List<T> result = new ArrayList<T>();
            collect(collection, filter, result);
            return result;
        }
    
        /**
         * 过滤并且去重
         *
         * @param collection
         * @param filter
         * @param <T>
         * @return
         */
        public static <T> Set<T> collectUnique(Collection<T> collection, FilterCondition<T> filter) {
            Set<T> result = new HashSet<T>();
            collect(collection, filter, result);
            return result;
        }
    
        /**
         * @param list
         * @param filter
         * @param result
         * @param <T>
         */
        private static <T> void collect(Collection<T> list, FilterCondition<T> filter, Collection<T> result) {
            for (T t : list) {
                if (filter.isSupport(t)) {
                    result.add(t);
                }
            }
        }
    
        /**
         *
         * @param collection
         * @param sum
         * @param result
         * @param <K>
         * @param <T>
         * @return
         */
        public static <K, T> K calulate(Collection<T> collection, K result , CalulateStrategy<T, K> sum) {
            for (T t : collection) {
                result = sum.calulate(t,result);
            }
            return result;
        }
    
        /**
         * 统计
         * @param collection
         * @param sum
         * @param <K>
         * @param <T>
         */
        public static <K, T> K calulate(Collection<T> collection, CalulateStrategy<T, K> sum){
    
            ResolvableType resolvableType = ResolvableType.forClass(sum.getClass());
            Class<K> clazz = (Class<K>) resolvableType.getInterfaces()[0].getGeneric(1).resolve();
            K result = BeanUtils.instantiateClass(clazz);
            return calulate(collection, result, sum);
        }
    
        /**
         * @param collection
         * @param condition
         * @param <T>
         * @param <K>
         * @param <V>
         * @return
         */
        public static <T, K, V> Map<K, V> mapping(Collection<T> collection, MappingCondition<T> condition) {
            Map<K, V> result = new HashMap<K, V>();
            for (T t : collection) {
                Map<K, V> groupId = condition.mapping(t);
                if (result.containsKey(groupId.keySet().iterator().next())) {
                    throw new BusinessException("对象映射错误...存在相同key的元素");
                }
    
                result.putAll(groupId);
            }
            return result;
        }
    
        /**
         * 根据对象内容获取分组key
         *
         * @param <T>
         */
        public interface GroupCondition<K, T> {
            /**
             * 根据T获取key
             *
             * @param t
             * @return
             */
            K getGroupKey(T t);
        }
    
        /**
         * 过滤方法
         *
         * @param <T>
         */
        public interface FilterCondition<T> {
    
            /**
             * 过滤条件
             *
             * @param t
             * @return
             */
            boolean isSupport(T t);
        }
    
        /**
         * 实例映射方法
         *
         * @param <T>
         */
        public interface MappingCondition<T> {
            /**
             * 实例映射
             *
             * @param t
             * @param <K>
             * @return
             */
            <K, V> Map<K, V> mapping(T t);
        }
    
    
        /**
         * 统计策略
         *
         * @param <T>
         */
        public interface CalulateStrategy<T, K> {
    
            K calulate(T t,K k);
        }
    
        /**
         * 消费接口
         * @param <T>
         */
        public interface ComsumerAction<T>{
    
            void handle(T t);
        }
    }
    
  • 相关阅读:
    ADO.NET中DataSet的应用(读书笔记5)
    ADO.NET中DataTable的应用(读书笔记4)
    如何在前端界面操作数据表(读书笔记3)
    如何在各类空间中输入输出数据(读书笔记2)
    关于利用input的file属性在页面添加图片的问题
    本地存储
    react
    微信开发
    node
    SVN和GIT
  • 原文地址:https://www.cnblogs.com/lameclimber/p/14445936.html
Copyright © 2011-2022 走看看