【java学习之路】(java SE篇)014.Stream API
Stream API
Stream是一组用来处理数组、集合的API
▪ Java 8之所以费这么大功夫引入函数式编程,原因有二:
– 代码简洁函数式编程写出的代码简洁且意图明确,使用 stream 接口让你从此告别 for 循环。
– 多核友好,Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下parallel()方法。
Stream特性
1:不是数据结构,没有内部存储
2:不支持索引访问
3:延迟计算
4:支持并行
5:很容易生成数组或集合(List,Set)
6:支持过滤,查找,转换,汇总,聚合等操作
Stream运行机制
Stream分为 源source,中间操作,终止操作
流的源可以是一个数组、一个集合、一个生成器方法,一个I/O通道等等。
一个流可以有零个和或者多个中间操作,每一个中间操作都会返回
一个新的流,供下一个操作使用。一个流只会有一个终止操作
Stream只有遇到终止操作,它的源才开始执行遍历操作
Stream的创建
1、通过数组
2、通过集合来
3、通过Stream.generate方法来创建
4、通过Stream.iterate方法来创建
5、其他API创建
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;public class StreamDemo {//通过数组来生成static void gen1(){String[] strs = {"a","b","c","d","e"};Stream<String> strs1 = Stream.of(strs);strs1.forEach(System.out::println);}//通过集合来生成static void gen2(){List<String> list = Arrays.asList("1","2","3","4");Stream<String> stream = list.stream();stream.forEach(System.out::println);}//generatestatic void gen3(){Stream<Integer> generate = Stream.generate(()->1);generate.limit(10).forEach(System.out::println);}//iteratorstatic void gen4(){Stream<Integer> iterate = Stream.iterate(1, x -> x + 1);iterate.limit(10).forEach(System.out::println);}//其他方式static void gen5(){String str = "abcdef";IntStream stream = str.chars();stream.forEach(System.out::println);}public static void main(String[] args) {// gen1();
// gen2();
// gen3();
// gen4();gen5();}
}
Stream常用API
中间操作
过滤 filter
去重 distinct
排序 sorted
截取 limit、skip
转换 map/flatMap
其他 peek
终止操作
循环 forEach
计算 min、max、count、 average
匹配 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny
汇聚 reduce
收集器 toArray collect
import java.util.Arrays;
import java.util.List;
import java.util.Optional;public class Stream1 {public static void main(String[] args) {// List<Integer> list = Arrays.asList(5,4,3,2,1);//注意,如果调用方法返回的是一个Stream对象,那就是中间操作Arrays.asList(5,4,3,2,1).stream().filter((x)->x%2==0).sorted().forEach(System.out::println);//求出结果中所有偶数的和//mapToInt:转为IntStream类型int sum = Arrays.asList(5, 4, 3, 2, 1).stream().filter((x) -> x % 2 == 0).mapToInt(x -> x).sum();System.out.println(sum);//求集合中的最大值List<Integer> list = Arrays.asList(5, 4, 3, 2, 1);Optional<Integer> max = list.stream().max((a, b) -> a - b);System.out.println(max.get());}
}
【java学习之路】(java SE篇)014.Stream API相关推荐
- 个人开发经历--我的java学习之路(学校篇)
个人开发经历--我的java学习之路(学校篇) 个人介绍: 姓名: 不在这里说明 联系信息: 个人历程 jdbc阶段 sql生成器 一代代码生成器 servlet阶段 servlet项目中,sql生成 ...
- java学习之路---java学习的方法和java学习路线
转载于: http://blog.csdn.net/zhangerqing 前段时间逛论坛,总会有很多新手很迷茫,问到:到底该怎么学好Java,这个问题很重要,尤其对于像我们这样大多数都是靠自学的人来 ...
- Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释
这里写目录标题 Java简介 Java发展历程 Java语言平台版本 Java语言的特点 Java语言跨平台原理--JVM JRE和JDK JDK安装路径下的目录解释 Java基础语法 Java标识符 ...
- Java学习之路 -- Java怎么学?
文章目录 java基础怎么学? 学完基础学什么? 几个常用框架学完学什么? MQ JVM的知识跑不掉 微服务等等 其他 数据结构和算法 java基础怎么学? 当时,作为懵懂的小白,大一学习了c和c++ ...
- JAVA学习之路--基础篇三
目录 关于Java中从键盘输入的语句 nextxxx().next().nextLine()的区别 语句 if和if else语句 Switch语句 for语句 while和do..while bre ...
- java学习之路目录(已完结)
java学习之路目录(持续更新中-) 第一阶段 javaSE(完结) 序号 标题 内容 001 java初识 java语言特点.体系结构.运行机制 002 java SE基础语法 注释.关键字.变量. ...
- 我的Java学习之路2009-11-17
-------------------------------2009年3月19日开始----------------------------- 下载JDK Myeclipse Netbeans JB ...
- 菜鸟haqima的Java学习之路第一天
菜鸟haqima的Java学习之路第一天 导读:DOS命令 常用快捷键 Java的简单概述 (第一章 Java开发环境的搭建) 1.常用的DOS命令 1.1.怎么打开DOS命令窗口 win键+r(组合 ...
- Java学习之路02_选择方向_旺旺老师
提示:请您先阅读第一部分:Java学习之路01_软件江湖_旺旺老师 第二部分:帮派之争 就好像玩游戏要先选择角色种族,进入江湖要先选择帮派,那搞软件开发也要选择方向.个人总结的软件开发的方向:嵌入式开 ...
- Java学习之路-预科
Java学习之路-预科 第一章 学习计算机的基本知识 文章目录 Java学习之路-预科 前言 一.什么是计算机? 二.硬件及冯诺依曼结构 1.计算机硬件 1.1 计算机硬件组成 1.2 什么是装机 1 ...
最新文章
- python可视化:matplotlib学习笔记
- java高效编程_Java高效编程
- 文本挖掘之文本相似度判定
- mysql实时增量备份
- Alibaba Nacos 服务消费者工程接入nacos并实现调用服务提供者工程
- php判断微信版本,判断是否是微信访问并获取版本号
- edge无法打印pdf_一文搞定PDF无法复制/打印/编辑
- android真实项目教程(七)——梦醒边缘花落_by_CJJ
- 【毕业答辩】毕业设计答辩前期准备
- 命令折叠代码的所有部分?
- 你应该知道的RPC原理
- 在PADS中如何导出PCB封装库
- 《Using OpenRefine》翻译~8
- 江苏省泰州市谷歌高清卫星地图下载
- 天津大学仁爱学院2014计算机系毕业晚会,天津大学仁爱学院什么专业好
- python基础----文件处理
- 表情符号(emoji)大全,只此一文便够了
- CSDN实训 - Java模拟二次验证码(动态令牌)
- 传递给数据库 'master' 中的日志扫描操作的日志扫描号无效
- 浅谈主键索引与唯一索引
热门文章
- C++11在加入<thread>头文件后Socket服务器接收不到消息
- c语言如何找一个数的ac码,详细解析C语言中的开方实现
- 房产管理信息系统 oracle,房地产企业项目信息管理系统|案场管理系统
- mybatis 依赖于jdbc_第1章 MyBatis快速入门
- druid 手动指定数据源_Spring Boot2 系列教程(二十)整合JdbcTemplate 多数据源
- UGUI 图片灰显裁剪
- matplotlib——散点图
- oracle存储过程可以回退吗,Navicat 运行 Oracle 存储过程示例
- EDA实验课课程笔记(六)——NC-verilog的介绍与使用(二)
- sybase 设置默认值_[转]SYBASE 数据库操作笔记