java stream 实践篇
文章目录
- List与Map转换
- List<Object> 转换为类似为 Map<Integer, List<Object>>
- List<Object> 转换为类似为 Map<Integer, Object>
- List<Object> 转换为类似为 Map<属性1, 属性2>
- List<对象>转List<属性>
- 提取对象中单个属性的集合or去重
- 按属性分组to Map
- 过滤某个属性,返回一个值
- List某字段求和/取平均等操作
- 踩过的坑
- foreach无序
经常用stream操作,但一段时间不用就会忘记,借此来写篇博客~
List与Map转换
List 转换为类似为 Map<Integer, List>
按某个属性进行分组
//定义
public class User {private String name;private Integer age;private Integer gender;}//伪代码
public static void main(String[] args) {List<User> list = getUserList();//提取名字相同的记录,拼接成map Map<String, User> map = list.stream().collect(Collectors.groupingBy(User::getName));}
List 转换为类似为 Map<Integer, Object>
//定义
public class User {private String name;private Integer age;private Integer gender;}//伪代码
public static void main(String[] args) {List<User> list = getUserList();//防止key值冲突Map<String, User> map = list.stream().collect(Collectors.toMap(e -> {return (e.getName() + "_" + e.getAge());}, Function.identity(), (key1, key2) -> key2));}
此处有两种写法:
- Collectors.toMap(User::getName, User -> User);
- Collectors.toMap(User::getName, Function.identity());
List 转换为类似为 Map<属性1, 属性2>
//定义
public class User {private String name;private Integer age;private Integer gender;}//伪代码
public static void main(String[] args) {List<User> list = getUserList();//两个属性值,一个为key,一个为valueMap<String, Integer> map = list.stream().collect(Collectors.toMap(User::getName, User::getAge));}
List<对象>转List<属性>
例子中用到的User实体类
//定义
public class User {private String name;private Integer age;private Integer gender;}
提取对象中单个属性的集合or去重
如下案例,提取User对象
集合中属性name
集合
//伪代码
public static void main(String[] args) {List<User> list = getUserList();//提取name集合List<String> nameList = list.stream().map(User::getName).collect(Collectors.toList());//提取name集合并去重,distinct()List<String> nameList = list.stream().map(User::getName).distinct().collect(Collectors.toList());}
按属性分组to Map
//伪代码
public static void main(String[] args) {List<User> list = getUserList();//提取name集合Map<String, List<User>> ageMap = list.stream().collect(Collectors.groupingBy(User::getAge));}
过滤某个属性,返回一个值
举个栗子:从列表中获取年龄为16岁的某个用户姓名(随机)
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;public class TestService {public static void main(String[] args) {List<User> userList = new ArrayList<User>();User user1 = new User("lizzy", 18);userList.add(user1);User user2 = new User("小芳", 16);userList.add(user2);User user3 = new User("小花", 17);userList.add(user3);User user4 = new User("小玲", 19);userList.add(user4);User user5 = new User("小雨", 20);userList.add(user5);Optional<String> name = userList.stream().filter(user -> user.getAge() == 16).map(User::getName).findFirst();if (name.isPresent()) {System.out.println(String.format("年龄16岁的小姐姐芳名为:%s", name.get()));}}}
List某字段求和/取平均等操作
IntSummaryStatistics、相应的还有DoubleSummaryStatistics, LongSummaryStatistics
public class SummaryStatistics {public static void main(String[] args) {//1.对int类型list进行求和List<User> list = new ArrayList<User>();list.add(new User('lizzy', 18));list.add(new User('huajuan', 28));IntSummaryStatistics summaryStatistics = list.stream().mapToInt((s) -> s.getAge).summaryStatistics();System.out.println("总和:" + summaryStatistics.getSum());System.out.println("平均数:" + summaryStatistics.getAverage());System.out.println("总个数:" + summaryStatistics.getCount());System.out.println("最大值:" + summaryStatistics.getMax());System.out.println("最小值:" + summaryStatistics.getMin());}
}
踩过的坑
foreach无序
java stream 有序_关于java:Stream.forEach是否遵循顺序流的遭遇顺序?
java foreach顺序_面试:Stream#foreach方法摸底三问,你都了解吗
需要在并行流中保证元素顺序消费需要使用java.util.stream.Stream#forEachOrdered
未完待续。。。
java stream 实践篇相关推荐
- Java-Runoob:Java Stream、File、IO
ylbtech-Java-Runoob:Java Stream.File.IO 1.返回顶部 1. Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出 ...
- Java Stream(流)的分类, 四大基本流的介绍
上一篇文章已经介绍过什么是流, 以及流的基本概念 http://blog.csdn.net/nvd11/article/details/29917065 本文主要介绍java四大基本流的方法. 一, ...
- Java Stream简介, 流的基本概念.
在Java or .net编程中, 我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是S ...
- Java Stream API性能测试
Java Stream API性能测试 已经对Stream API的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对Stream API的性能一探究竟. 为保证测试 ...
- java stream中Collectors的用法
文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...
- java stream 原理
java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选 ...
- Java Stream ORM现在带有JOIN
Speedment是一个Java Stream ORM工具包和运行时,它使您可以将数据库表作为标准Java Streams查看. 由于不必混合使用Java和SQL,因此该应用程序变得更加紧凑,从而使其 ...
- java stream 分组求和_Java stream List 求和、分组操作
Java stream List 求和.分组操作 前言 项目中经常会使用Stream操作一些集合数据,今天记录一下我经常使用的Stream操作 求和操作public static void main( ...
- java peek函数_基础篇:JAVA.Stream函数,优雅的数据流操作
写在开头:本文是转载于掘金上的一篇文章,已获得原作者授权,我会在文章最后放上原作者和原文链接. 前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stre ...
最新文章
- 人工智能是什么?带你一次掌握人工智能的三大重点及三大领域
- rocketmq怎么保证消息一致性_RocketMQ为什么要保证订阅关系的一致性?
- 人口普查(20) PAT
- RedHat下建立群集
- MDM9x35MDM9x35启动流程简介
- 关于获取网络流,根据网络流转byte[],本地文件流转byte[],方法记录
- C++开发中类的定制
- linux怎么在win上安装mysql_CentOS下安装MySQL及Windows下使用Navicat for MySQL连接
- 控制台查出数据传到layui数据表格却没有数据的问题
- jvm体系结构概述_JVM体系结构:JVM和JVM体系结构概述
- 广告贴:本周六的SharePoint技术交流会
- ros之旋转加平移公式
- apache2.2后修改最大并发连接数
- hibernate数据库扫描实体类的配置
- Android流量监控以及流量防火墙的概述
- 样本调试之 loadlibrary 报错1114
- 阿里巴巴对工业互联网志在必得,阿里云如何啃硬骨头?
- vue.runtime.esm.js?2b0e:619 [Vue warn]: Failed to mount component: template or render function not d
- F28335第七篇——新建项目之编程演示
- Post请求报错405
热门文章
- ChatGpt的出现,前端真的会失业吗?
- io流的文件读取和写入
- html和css还原小米商城首页面|3
- 前端每日实战:54# 视频演示如何用纯 CSS 创作一副国际象棋
- 万字长文-通过Fiddler抓包和jd-gui反编译白嫖某“绅士”APP内的正能量资源(二)
- python中文词组统计次数_python统计中文词组出现次数
- java: 错误: 无效的源发行版:17
- php xmlreader nodetype,XmlNodeReader.NodeType 属性 (System.Xml) | Microsoft Docs
- 1.15 快速更改同名变量 [原创iOS开发-Xcode教程]
- 宏任务和微任务的区别