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集合;
java8模拟grouby方法的更多相关文章
- 30分钟入门Java8之默认方法和静态接口方法
30分钟入门Java8之默认方法和静态接口方法 前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方 ...
- I2C总线协议的软件模拟实现方法
I2C总线协议的软件模拟实现方法 在上一篇博客中已经讲过I2C总线通信协议,本文讲述I2C总线协议的软件模拟实现方法. 1. 简述 所谓的I2C总线协议的软件模拟实现方法,就是用软件控制GPIO的输入 ...
- javascript实现继承3种方式: 原型继承、借用构造函数继承、组合继承,模拟extends方法继承
javascript中实现继承的三种方式:原型继承.借用构造函数继承.混合继承: /* js当中的继承 js中 构造函数 原型对象 实力对象的关系: 1 构造函数.prototype = 原型对象 2 ...
- JAVA8新特性——方法引用
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ 在Lamda新特性的支持下,JAVA8中可以使用lamda表达式来创建匿名方法.然而,有时候我们仅仅是需要调用一个已存在的方法(如 ...
- Java8 Period.between方法坑及注意事项
在使用Java8 新特性中关于Period.between的方法时需注意该方法获取日期的区间问题. @Test public void test1(){ LocalDate from = LocalD ...
- Java8的Stream方法findAny空指针异常(NullPointerException)实例对比
实战介绍 学习完Java8的Stream方法,可能你正准备大展身手,却发现遇到不少问题,本篇文章为大家带来一个findAny方法抛出java.lang.NullPointerException的场景. ...
- Java8 新特性 方法引用
什么是方法引用 方法引用可以被看作仅仅调用特定方法的Lamdba表达式的一种快捷方式.比如说Lamdba代表的只是直接调用这个方法,最好还是用名称来调用它,可不用用对象.方法名(),方法引用,引用 ...
- Java&Selenium 模拟键盘方法封装
Java&Selenium 模拟键盘方法封装 package util; import java.awt.AWTException; import java.awt.Robot; import ...
- Java&Selenium 模拟鼠标方法封装
Java&Selenium 模拟鼠标方法封装 package util; import org.openqa.selenium.By; import org.openqa.selenium.W ...
随机推荐
- idea创建maven SSM项目
maven配置 ➜ ~ cd /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf ➜ conf vim set ...
- [转帖]Loading Data into HAWQ
Loading Data into HAWQ Leave a reply Loading data into the database is required to start using it bu ...
- Mock an function to modify partial return value by special arguments on Python
Mock an function to modify partial return value by special arguments on Python python mock一个带参数的方法,修 ...
- webpack简介与使用
欢迎小伙伴们为 前端导航仓库 点star https://github.com/pfan123/fr...前端导航平台访问 CommonJS 和 AMD 是用于 JavaScript 模块管理的两大规 ...
- tensorflow学习笔记————分类MNIST数据集
在使用tensorflow分类MNIST数据集中,最容易遇到的问题是下载MNIST样本的问题. 一般是通过使用tensorflow内置的函数进行下载和加载, from tensorflow.examp ...
- PL/SQL控制结构
顺序结构 按先后顺序 分支判断结构 IF语句 IF condition THEN statements; [ELSIF condition THEN statements;] [ELSE statem ...
- 9 ArcGIS Server 性能优化
1.系统性能影响因子 地图.服务类型.数据源.客户端技术.CPU.数据结构.网络.内存.存储.部署.架构.服务接口.SDE等. 2.ArcGIS Server性能优化 数据结构与数据源:数据结构(矢量 ...
- 转 python测试框架最全资源汇总
转自: http://www.testclass.net/list/python_list_1/ xUnit frameworks(单元测试框架) frameworks 框架 unittest - p ...
- C#常用加密方法
using System; using System.IO; using System.Security.Cryptography; using System.Text; /// <summar ...
- JavaScript基础知识(字符串的方法)
字符串的方法 1.字符串: 在js中被单引号或双引号包起来的内容都是字符串: var t = "true"; console.log(typeof t);// "stri ...