java拆分list_Java 8 stream 流 拆分list
背景:希望List 可以根据某个字段 进行分组 然后拆分
使用Java 8 的流来做。
java.util.stream.Collectors#groupingBy(java.util.function.Function super T,? extends K>, java.util.stream.Collector super T,A,D>)
使用Group By 方法 默认会转换为 List
可以看到 默认是使用toList()
classifer 是返回的Map的Key 。
groupingBy(Function super T, ? extends K> classifier) {
return groupingBy(classifier, toList());
}
public static
Collector> groupingBy(Function super T, ? extends K> classifier,
Collector super T, A, D> downstream) {
return groupingBy(classifier, HashMap::new, downstream);
}
这个可以提供转换的downStream,变成希望的类型。
public static >
Collector groupingBy(Function super T, ? extends K> classifier,
Supplier mapFactory,
Collector super T, A, D> downstream)
好了 来几个例子吧:
TestPerson 类, List 存储的是这个对象
private static classTestPerson {
String userName;intid;intage;public TestPerson(String userName, int id, intage) {this.userName =userName;this.id =id;this.age =age;
}publicString getUserName() {returnuserName;
}public voidsetUserName(String userName) {this.userName =userName;
}public intgetId() {returnid;
}public void setId(intid) {this.id =id;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}
@OverridepublicString toString() {return "TestPerson{" +
"userName='" + userName + '\'' +
", id=" + id +
", age=" + age +
'}';
}
}
}
List 中 存储一些对象
List persons = Arrays.asList(
new TestPerson("zhangsan",1,20),
new TestPerson("lisi",2,21),
new TestPerson("wangwu",3,20)
);
案例1 :根据Age 分组,并且拆分成两个group
Map> personPerAge = persons.stream().collect(groupingBy(TestPerson::getAge));
System.out.println("分成了"+personPerAge.size()+"组");
for(List personList : personPerAge.values()) {
System.out.println("One group:");
for(TestPerson person :personList){
System.out.println(person);
}
}
console:
分成了 2组
One group:
TestPerson{userName='zhangsan', id=1, age=20}
TestPerson{userName='wangwu', id=3, age=20}
One group:
TestPerson{userName='lisi', id=2, age=21}
案例2 : 根据一个对象进行分组,
假设每个人都有个班级或者等级吧 , 这个时候我希望 同时加上这个班级的名称 进行分组
private static classTestClass{privateTestPerson person;privateString className;publicTestPerson getPerson() {returnperson;
}public voidsetPerson(TestPerson person) {this.person =person;
}publicString getClassName() {returnclassName;
}public voidsetClassName(String className) {this.className =className;
}
}
案例3 可以拿到每组中的最大值,平均值,最小值等等 ,是不是和数据库很像?
public static voidmain(String[] args) {
TestPerson zhangsan= new TestPerson("zhangsan",1,18);
TestPerson lisi= new TestPerson("lisi", 1, 19);
TestPerson wangwu= new TestPerson("wangwu", 2, 20);
TestPerson wangwu1= new TestPerson("wangwu1", 2, 21);/*List classes = Arrays.asList(
new TestClass(zhangsan,"A"),
new TestClass(zhangsan,"B"),
new TestClass(wangwu,"C")
);
Map> classPerPerson = classes.stream().collect(groupingBy(TestClass :: getPerson));
System.out.println("分成了"+classPerPerson.size()+"组");
for(List classList : classPerPerson.values()) {
System.out.println("One group:");
for(TestClass clazz : classList){
System.out.println(clazz);
}
}*/List persons =Arrays.asList(
zhangsan,
lisi,
wangwu,
wangwu1
);
Map personPerAge =persons.stream().collect(groupingBy(TestPerson::getId, summarizingInt(TestPerson::getAge)));
personPerAge.forEach((k,v)->
System.out.println("This group id is "+k+" and the summary is " +v)
);
}
对 后面我使用了forEach 和Lamda 表达式 一起配合使用,
当然 还支持过滤功能 ,大家可以一起来玩哈。
参考文章:
https://www.baeldung.com/java-groupingby-collector
https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/index.html
java拆分list_Java 8 stream 流 拆分list相关推荐
- java8 拆分list_Java 8 stream 流 拆分list
背景:希望List 可以根据某个字段 进行分组 然后拆分 使用Java 8 的流来做. java.util.stream.Collectors#groupingBy(java.util.functi ...
- java 新特性之 stream 流
java 新特性之 stream 流 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在 ...
- stream distinct去重_再来看看Java的新特性——Stream流
半年前开始试着使用Java的新特性,给我印象最深的就是Stream流和Optional.其中Stream提高了看法效率,让代码看起来十分清爽. 为什么要使用流? 摘要中已经说明了,为了提高开发效率.流 ...
- java 合并流_Java Stream 流实现合并操作示例
本文实例讲述了Java Stream 流实现合并操作.分享给大家供大家参考,具体如下: 1. 前言 Java Stream Api提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为 ...
- Java JDK8新特性Stream流
1.Stream流 1. 流,支持处理数据处理操作的源生成的元素序列.流有两个重要特性:1流水线:很多流操作本身会返回一个流,这样多的操作就可以链接起来,形成一个大的流水线.2,内部迭代.流的迭代是在 ...
- java(九)-方法引用, Stream流,File类 , 递归 ,字节流
day09[方法引用.Lambda表达式.Stream流] 今日目标 线程状态 等待与唤醒 Lambda表达式 Stream流 教学目标 能够说出线程6个状态的名称 能够理解等待唤醒案例 能够掌握La ...
- java 合并流_Java Stream 流如何进行合并操作
1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 ...
- Java函数式编程学习——Stream流
目录 概述 案例数据准备 1. 常用操作 2. 中间操作 filter map distinct sorted limit skip flatMap 3. 终结操作 foreach count max ...
- java 1.8stream_java jdk1.8 使用stream流进行list 分组归类操作
我就废话不多说了,大家还是直接看代码吧~ import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util. ...
最新文章
- 使用扩展方法和静态门面类实现伪领域对象
- 从睡姿就可以看出你的性格,据说非常准,快存!
- 百度面试 中缀表达式变成后缀表达式
- python下载教程1001python下载教程-Python知识圈
- python抓取头条文章
- 虚拟化何以四两拨千斤
- 这个回答让我错失offer!成功收获美团,小米安卓offer
- mediainfo php,media.php
- zabbix学习笔记(1)
- 系统学习深度学习(九)--激活函数总结
- 九度OJ 1068:球的半径和体积 (基础题)
- html静态网页实例一(附完整代码)
- 一个Python开源项目-腾讯哈勃沙箱源码剖析(上)
- 寂静岭2java攻略_寂静岭2攻略
- 玩转Qml(18)-用户向导
- 什么是数据库中的一对一关系?
- 独家对话徐翔妻子:我为什么起诉离婚
- 1397 火车票退票费计算(函数专题)
- vue用路由守卫进行登录后的路由跳转
- 单相PWM整流器的数学模型、工作原理
热门文章
- 蓝奏云PHP解析接口,蓝奏云下载地址解析API[直链]
- 博客中的动态图片如何制作
- linux线程亲和性,线程亲和性
- p40华为鸿蒙系统gms服务,华为P40确定:告别鸿蒙系统,告别谷歌GMS,转用使用HMS...
- python微信爬取教程_python爬取微信文章方法
- 力扣题解: 55. 跳跃游戏
- 文本分割之垂直投影法基于OpenCV(python)的实现
- office2007的Excel当中如何打开两个独立窗口
- <<视觉问答>>2021:Zero-shot Visual Question Answering usingKnowledge Graph
- 读书笔记 - 学会写作: 什么是写作?