您好!欢迎来到源码码网

Java 8 Stream API实例

  • 源码教程
  • 来源:源码码网
  • 编辑:admin
  • 时间:2020-04-28 18:21
  • 阅读:610

一、开篇

Stream?其实就是处理集合的一种形式,称之为流,在Java8中被引入,可被Collection中的子类调用。

作用?简化代码,提升你的开发效率。

不会?看完这篇你就能自己上手了!

二、实例

首先将你的集合处理成流,才可以使用此API。

Stream<String> stream = list.stream();

 接下来创建一个String类型的List,便于测试。

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(7);
list.add(4);
list.add(6);

 接下来展示具体参数使用方式。

filter 过滤

例:需要过滤出在集合中,大于5的数字的集合。

List<Integer> result = list.stream().filter(o -> o>5).collect(Collectors.toList());

filter内部使用的是lamda表达式,也是Java8的功能,o代表集合中每一个元素,o>5表示这个元素的值若大于5就返回true,就获取结果。collect表示聚合,Collectors.toList()表示将结果聚合到一个List集合。


map 形成一个新对象

例:需要将集合内的元素全部转换成String类型。

List<String> result = list.stream().map(o->String.valueOf(o)).collect(Collectors.toList());

sort 排序

例: 需要从小到大排序。

List<Integer> result = list.stream().sorted().collect(Collectors.toList());

例: 需要从大到小排序。

List<Integer> result = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

forEach 遍历

例: 打印集合内每个元素。

list.stream().forEach(o->System.out.println(o));
list.forEach(o->System.out.println(o));
distinct 去除重复元素
List<Integer> result = list.stream().distinct().collect(Collectors.toList());

reduce 集合内运算

例: 计算集合中元素的和。

Integer sum = list.stream().reduce(0, (i, j) -> i + j);

reduce中第一个参数为基数,即为初始值,i,j的定义为第一个和第二个操作数,i+j即为操作,此处为加法操作。


如果计算乘法,就不能设置初始值为0,因为0乘任何数都为0。


collect 聚合成Collection

Collectors.toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper)
Collectors.toList()
Collectors.toSet()
...

例: 将list聚合成一个key为元素,value为“item”+元素的Map。

Map<Integer, String> map = list.stream().collect(Collectors.toMap(Function.identity(), o -> String.format("item%s", o)));

结果:{1=item1, 2=item2, 3=item3, 4=item4, 6=item6, 7=item7}


keyMapper表示设置为key的规则,valueMapper表示设置为value的规则。


Function.identity()表示当前本身元素。


groupBy 分组

Collectors.groupingBy(Function<? super T, ? extends K> classifier)


新建一个User实体,有姓名和年龄两个字段,并初始化一个集合便于测试。

List<User> list = new ArrayList<User>();
list.add(new User("与李", 18));
list.add(new User("CSDN", 19));
list.add(new User("han", 20));
list.add(new User("han", 21));

例: 需要把名字相同的实体提出来放在一起,形成一个List集合。

Map<String, List<User>> group = list.stream().collect(Collectors.groupingBy(User::getName));

结果:{han=[User [name=han, age=20], User [name=han, age=21]], CSDN=[User [name=CSDN, age=19]], 与李=[User [name=与李, age=18]]}


此处使用User实体的name属性进行分组。


User::getName 与 o -> o.getName() 含义相同,两者皆可传入。


partitioningBy 分区

Collectors.partitioningBy(Predicate<? super T> predicate)


例: 分别统计年龄大于等于20和小于20的学生信息

Map<Boolean, List<User>> partitioning = list.stream().collect(Collectors.partitioningBy(o -> o.getAge() >= 20));

结果:{false=[User [name=与李, age=18], User [name=CSDN, age=19]], true=[User [name=han, age=20], User [name=han, age=21]]}


可以看到返回结果是一个Map<Boolean, List<User>>,利用partitioningBy后生成的map,有且仅有两个元素,key固定为true和false,分别表示满足条件的信息和不不满足条件的信息。


三、结尾

此文列举了Stream部分方法的使用,具体更多的方法需要自己去深入了解。通过熟悉使用Stream的api之后,你会对它的处理方式爱不释手。


原文链接:https://blog.csdn.net/qq_37171817/java/article/details/105735552


特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 常用测试压力工具使用介绍
  • 常用测试压力工具使用介绍
  • ab 是 ApacheBench 工具的缩写,它是一个HTTP压力测试工具。让我详细说明如何测试:1. 安装ApacheBenchWindows系统:方法一:安装XAMPP或WAMP(自带ab)下载地址:https://www.apachefriends.org/zh_cn/index.html安装后,ab工具在:C:xamppapacheinab.exe方法二:使
  • 开发工具
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-13 20:27
  • 阅读:58
  • 工程项目一体化自动管理软件解决方案
  • 工程项目一体化自动管理软件解决方案
  • 1.项目概述1.1项目背景在工程建设行业数字化转型浪潮下,传统项目管理面临信息孤岛、协同困难、进度不可控、成本超支等痛点。本方案旨在构建一个覆盖工程项目全生命周期、全参与方、全业务流程的一体化智能管理平台。1.2解决方案愿景打造数据驱动、智能协同、风险预警、自动执行的工程大脑,实现:管理流程自动化率≥80%项目协同效率提升40%成本偏差率降低至±3%以内安全事故发生率降低60%1.3目标用户矩阵┌───────────────┬
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:26
  • 阅读:169
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 车辆管理系统需求文档与技术架构PC端+小程序
  • 第一部分:需求文档1.项目概述1.1项目背景为企事业单位、车队运营商、租赁公司等提供一套完整的车辆全生命周期管理解决方案,实现车辆管理数字化、智能化。1.2项目目标建立车辆从购置到报废的全流程管理体系实现用车申请、调度、监控、结算的闭环管理通过数据分析优化车辆使用效率降低车辆运维成本20%以上1.3用户角色矩阵┌──────────────┬─────────────────────────────┬──────────────
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:11
  • 阅读:157
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档
  • 智慧农业/渔业物联网系统需求文档文档版本: V1.0项目目标: 构建一个集环境智能监测、设备自动化控制、生长模型分析、溯源管理与远程指挥于一体的综合物联网管理平台,实现降本增效、提质增产、风险预警与品牌增值。1.系统总体概述1.1核心价值: 数据驱动决策,解放人力,实现农业/渔业生产的精准化、自动化与智能化。1.2用户角色:生产员/养殖员: 现场巡视、接收告警、执行设备手动控制、查看实时环境
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 11:04
  • 阅读:68
  • 程序员AI编程工具推荐
  • 程序员AI编程工具推荐
  • AI编程工具是当前开发者的“副驾驶”,能够极大提升开发效率。以下我将从通用型、代码专用型、垂直领域型以及开源/自部署型几个维度为您分类推荐,并附上它们的核心特点和适用场景,帮助您选择。一、通用型AI对话助手(编程是核心能力之一)这类工具本质是“更懂代码的ChatGPT”,适合处理广泛的编程问题、解释代码、生成文档等。ChatGPT(GPT-4/4o)简介:行业标杆,尤其在GPT-4版本下,代码理解和生成能力极强。优点:上下文能力强,
  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2026-01-09 10:56
  • 阅读:96
联系客服
源码代售 源码咨询 技术开发 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部