文章目录

  • 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));}

此处有两种写法:

  1. Collectors.toMap(User::getName, User -> User);
  2. 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 实践篇相关推荐

  1. Java-Runoob:Java Stream、File、IO

    ylbtech-Java-Runoob:Java Stream.File.IO 1.返回顶部 1. Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出 ...

  2. Java Stream(流)的分类, 四大基本流的介绍

    上一篇文章已经介绍过什么是流, 以及流的基本概念 http://blog.csdn.net/nvd11/article/details/29917065 本文主要介绍java四大基本流的方法. 一, ...

  3. Java Stream简介, 流的基本概念.

    在Java or .net编程中,  我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是S ...

  4. Java Stream API性能测试

    Java Stream API性能测试 已经对Stream API的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对Stream API的性能一探究竟. 为保证测试 ...

  5. java stream中Collectors的用法

    文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...

  6. java stream 原理

    java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选 ...

  7. Java Stream ORM现在带有JOIN

    Speedment是一个Java Stream ORM工具包和运行时,它使您可以将数据库表作为标准Java Streams查看. 由于不必混合使用Java和SQL,因此该应用程序变得更加紧凑,从而使其 ...

  8. java stream 分组求和_Java stream List 求和、分组操作

    Java stream List 求和.分组操作 前言 项目中经常会使用Stream操作一些集合数据,今天记录一下我经常使用的Stream操作 求和操作public static void main( ...

  9. java peek函数_基础篇:JAVA.Stream函数,优雅的数据流操作

    写在开头:本文是转载于掘金上的一篇文章,已获得原作者授权,我会在文章最后放上原作者和原文链接. 前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stre ...

最新文章

  1. 人工智能是什么?带你一次掌握人工智能的三大重点及三大领域
  2. rocketmq怎么保证消息一致性_RocketMQ为什么要保证订阅关系的一致性?
  3. 人口普查(20) PAT
  4. RedHat下建立群集
  5. MDM9x35MDM9x35启动流程简介
  6. 关于获取网络流,根据网络流转byte[],本地文件流转byte[],方法记录
  7. C++开发中类的定制
  8. linux怎么在win上安装mysql_CentOS下安装MySQL及Windows下使用Navicat for MySQL连接
  9. 控制台查出数据传到layui数据表格却没有数据的问题
  10. jvm体系结构概述_JVM体系结构:JVM和JVM体系结构概述
  11. 广告贴:本周六的SharePoint技术交流会
  12. ros之旋转加平移公式
  13. apache2.2后修改最大并发连接数
  14. hibernate数据库扫描实体类的配置
  15. Android流量监控以及流量防火墙的概述
  16. 样本调试之 loadlibrary 报错1114
  17. 阿里巴巴对工业互联网志在必得,阿里云如何啃硬骨头?
  18. vue.runtime.esm.js?2b0e:619 [Vue warn]: Failed to mount component: template or render function not d
  19. F28335第七篇——新建项目之编程演示
  20. Post请求报错405

热门文章

  1. ChatGpt的出现,前端真的会失业吗?
  2. io流的文件读取和写入
  3. html和css还原小米商城首页面|3
  4. 前端每日实战:54# 视频演示如何用纯 CSS 创作一副国际象棋
  5. 万字长文-通过Fiddler抓包和jd-gui反编译白嫖某“绅士”APP内的正能量资源(二)
  6. python中文词组统计次数_python统计中文词组出现次数
  7. java: 错误: 无效的源发行版:17
  8. php xmlreader nodetype,XmlNodeReader.NodeType 属性 (System.Xml) | Microsoft Docs
  9. 1.15 快速更改同名变量 [原创iOS开发-Xcode教程]
  10. 宏任务和微任务的区别