由于数据不能够在本地化实现, 无法通过sql语句得到对应的结果,小编只好在业务层处理。通过调用接口得到集合,拿到集合后,通过年来分组,以此来达到对应的Map集合。。。

在这里小编给大家提供一个封装了一套工具类,如下:

  1. public class ListUtils{
  2. /**
  3. * list 集合分组
  4. *
  5. * @param list 待分组集合
  6. * @param groupBy 分组Key算法
  7. * @param <K> 分组Key类型
  8. * @param <V> 行数据类型
  9. * @return 分组后的Map集合
  10. */
  11. public static <K, V> Map<K, List<V>> groupBy(List<V> list, GroupBy<K, V> groupBy) {
  12. return groupBy((Collection<V>) list, groupBy);
  13. }
  14. /**
  15. * list 集合分组
  16. *
  17. * @param list 待分组集合
  18. * @param groupBy 分组Key算法
  19. * @param <K> 分组Key类型
  20. * @param <V> 行数据类型
  21. * @return 分组后的Map集合
  22. */
  23. public static <K, V> Map<K, List<V>> groupBy(Collection<V> list, GroupBy<K, V> groupBy) {
  24. Map<K, List<V>> resultMap = new LinkedHashMap<K, List<V>>();
  25. for (V e : list) {
  26. K k = groupBy.groupBy(e);
  27. if (resultMap.containsKey(k)) {
  28. resultMap.get(k).add(e);
  29. } else {
  30. List<V> tmp = new LinkedList<V>();
  31. tmp.add(e);
  32. resultMap.put(k, tmp);
  33. }
  34. }
  35. return resultMap;
  36. }
  37. /**
  38. * List分组
  39. *
  40. * @param <K> 返回分组Key
  41. * @param <V> 分组行
  42. */
  43. public interface GroupBy<K, V> {
  44. K groupBy(V row);
  45. }
  46. }

例子:

  1. Map<String,List<Student>> resMap = ListUtils.groupBy(studentList,new ListUtils.GroupBy<String,Student>(){
  2. @Override
  3. public String groupBy(Student row){
  4. String ktrq = row.getKtrq();
  5. String ktrqStr = "";
  6. if(ktrq != null){
  7. ktrqStr = ktrq.substring(0,4);
  8. }
  9. return ktrqStr;
  10. }
  11. });

说明:

1.上述例子中,studentList 为学生集合别名,实体类为Student ,其中有个属性为ktrq (开通日期);

2. ktrq 在数据库为date 类型,且实体类定义为字符串类型,格式为 YYYY-MM-DD,使用substring() 截取,得到对应的年份,然后按照年份分组,最后得到对应的Map集合;

注: 如有问题,请留言;

JAVA 集合 按照某个字段(依据一定条件)进行分组的更多相关文章

  1. Java集合及concurrent并发包总结(转)

    Java集合及concurrent并发包总结(转)   1.集合包 集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Valu ...

  2. Java集合最全解析,学集合,看这篇就够用了!!!

    在看集合类之前, 我们要先明白一下概念: 1.数据结构 (1):线性表 [1]:顺序存储结构(也叫顺序表) 一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同 ...

  3. Java集合原理分析和知识点大杂烩(多图初学者必备!!)

    一.数据结构 ​ 数据结构就是计算机存储.组织数据的方式. ​ 在计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间,常用O符号来表述. ​ 时间复杂度是同一问题可用不同算法解决, ...

  4. 死磕 java集合之ConcurrentHashMap源码分析(三)

    本章接着上两章,链接直达: 死磕 java集合之ConcurrentHashMap源码分析(一) 死磕 java集合之ConcurrentHashMap源码分析(二) 删除元素 删除元素跟添加元素一样 ...

  5. Java 性能调优指南之 Java 集合概览

    [编者按]本文作者为拥有十年金融软件开发经验的 Mikhail Vorontsov,文章主要概览了所有标准 Java 集合类型.文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文: 本 ...

  6. 【转载】Java 集合框架

    http://wangkuiwu.github.io/2012/02/03/collection-03-arraylist/ 网上比较全的Java集合框架教程. 注:transient是Java语言的 ...

  7. java面试题------40个Java集合面试问题和答案

    Java集合框架为Java编程语言的基础,也是Java面试中非常重要的一个知识点. 这里,我列出了一些关于Java集合的重要问题和答案. 1.Java集合框架是什么?说出一些集合框架的长处? 每种编程 ...

  8. Java集合框架中的快速失败(fail—fast)机制

      fail-fast机制,即快速失败机制,是java集合框架中的一种错误检测机制.多线程下用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加.删除),则会抛出Concurre ...

  9. Java集合详解8:Java的集合类细节精讲

    Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...

随机推荐

  1. Js 语言中 变量提升问题

    变量提升: 提升变量的声明. 函数声明式: 像这种形式: function foo() {}: 会发生变量提升. 函数表达式: var fn=function fn(){}: 不会发生变量提升.var ...

  2. C博客作业01——分支、顺序结构

    1.本章学习总结 1.1思维导图 本章学习体会及代码量学习体会 1.2.1学习体会 在暑假的时候就有加入新生学习群,对C语言有一定的基础,所以这周的学习相对轻松,但一些细节方面的知识并不是很了解.在这 ...

  3. 备忘:移植ucos-III到stm32f103c8t6

    由于本人对linux系统内核这块比较感兴趣,下一份工作想做linux驱动相关的:于是最近一旦有空都在研究linux内核源码,面对linux内核这个庞然大物,越看越觉得不能太过急躁,且由于还要工作,只能 ...

  4. qtp type和set方法的区别

    type模拟键盘输入,是一个字符一个字符的输入. set是整个输入框一起置值. 例如:winedit中输入a后,再用type输入b,结果就是ab 如果用set输入a后,再用set输入b,结果就是b. ...

  5. Java中判断对象是否为空的方法

    首先来看一下工具StringUtils的判断方法:    一种是org.apache.commons.lang3包下的:    另一种是org.springframework.util包下的.这两种S ...

  6. Linux内存管理(一)

    Linux内存管理之一:基本概念篇 物理地址.线性地址(虚拟地址)和逻辑地址:阐述段式管理和页式管理基本概念:Linux操作系统内存管理和虚拟内存概念:为内核开发做一个基础铺垫. 内存是linux内核 ...

  7. Springmvc对就jdbc封装的操作

    解释: JdbcTemplate 封装常用的JDBC方法 HibernateTemplate  封装常用Hibernate方法 JdbcDaoSupport  JDBC数据访问对象的基类 Hibern ...

  8. day48-python爬虫学习三

    Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能.他们两个最显着的差异如下: urllib2可以接受一个Request对象,并以此可以来设置一个URL的h ...

  9. Oracle 11g 单实例到单实例OGG同步实施文档-OGG initial load

    Oracle 11g 单实例到单实例OGG同步实施文档-OGG initial load 2018-06-07 00:514730原创GoldenGate 作者: leo 本文链接:https://w ...

  10. leetcode python 041首个缺失正数

    ##限定时间复杂度O(n)num=[0,5,3,1,2,-2,4,8,5,6]num=set(num)d=1for i in range(1,len(num)+1):    if d in num:  ...