zoukankan      html  css  js  c++  java
  • java8模拟grouby方法

     public class ListUtils{
        /**
         * list 集合分组
         *
         * @param list    待分组集合
         * @param groupBy 分组Key算法
         * @param <K>     分组Key类型
         * @param <V>     行数据类型
         * @return 分组后的Map集合
         */
        public static <K, V> Map<K, List<V>> groupBy(List<V> list, GroupBy<K, V> groupBy) {
            return groupBy((Collection<V>) list, groupBy);
        }
        /**
         * list 集合分组
         *
         * @param list    待分组集合
         * @param groupBy 分组Key算法
         * @param <K>     分组Key类型
         * @param <V>     行数据类型
         * @return 分组后的Map集合
         */
        public static <K, V> Map<K, List<V>> groupBy(Collection<V> list, GroupBy<K, V> groupBy) {
            Map<K, List<V>> resultMap = new LinkedHashMap<K, List<V>>();
    
            for (V e : list) {
    
                K k = groupBy.groupBy(e);
                if (resultMap.containsKey(k)) {
                    resultMap.get(k).add(e);
                } else {
                    List<V> tmp = new LinkedList<V>();
                    tmp.add(e);
                    resultMap.put(k, tmp);
                }
            }
            return resultMap;
        }
        /**
         * List分组
         *
         * @param <K> 返回分组Key
         * @param <V> 分组行
         */
        public interface GroupBy<K, V> {
            K groupBy(V row);
        }
    }
    

      例子:

    Map<String,List<Student>> resMap = ListUtils.groupBy(studentList,new ListUtils.GroupBy<String,Student>(){
    @Override
    public String groupBy(Student row){
    String ktrq = row.getKtrq();
    String ktrqStr = "";
    if(ktrq != null){
    ktrqStr = ktrq.substring(0,4);
    }
    return ktrqStr;
    }
    });

    说明:

    1.上述例子中,studentList 为学生集合别名,实体类为Student ,其中有个属性为ktrq (开通日期);
    2. ktrq 在数据库为date 类型,且实体类定义为字符串类型,格式为 YYYY-MM-DD,使用substring() 截取,得到对应的年份,然后按照年份分组,最后得到对应的Map集合;

      



  • 相关阅读:
    Cefsharp支持MP4和MP3的CEF库cef.redist.x86.3.2623,对应Cefsharp49
    解读设计模式
    模拟支付宝、淘宝登录2
    模拟支付宝、淘宝登录1
    上一篇随笔是2011-11-21 17:23,唏嘘啊。。。
    像素格式
    YUV格式详解
    认识RGB和YUV
    WPF性能优化经验总结
    【日期正则表达式】
  • 原文地址:https://www.cnblogs.com/airycode/p/10435118.html
Copyright © 2011-2022 走看看