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相关推荐

  1. 个人开发经历--我的java学习之路(学校篇)

    个人开发经历--我的java学习之路(学校篇) 个人介绍: 姓名: 不在这里说明 联系信息: 个人历程 jdbc阶段 sql生成器 一代代码生成器 servlet阶段 servlet项目中,sql生成 ...

  2. java学习之路---java学习的方法和java学习路线

    转载于: http://blog.csdn.net/zhangerqing 前段时间逛论坛,总会有很多新手很迷茫,问到:到底该怎么学好Java,这个问题很重要,尤其对于像我们这样大多数都是靠自学的人来 ...

  3. Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释

    这里写目录标题 Java简介 Java发展历程 Java语言平台版本 Java语言的特点 Java语言跨平台原理--JVM JRE和JDK JDK安装路径下的目录解释 Java基础语法 Java标识符 ...

  4. Java学习之路 -- Java怎么学?

    文章目录 java基础怎么学? 学完基础学什么? 几个常用框架学完学什么? MQ JVM的知识跑不掉 微服务等等 其他 数据结构和算法 java基础怎么学? 当时,作为懵懂的小白,大一学习了c和c++ ...

  5. JAVA学习之路--基础篇三

    目录 关于Java中从键盘输入的语句 nextxxx().next().nextLine()的区别 语句 if和if else语句 Switch语句 for语句 while和do..while bre ...

  6. java学习之路目录(已完结)

    java学习之路目录(持续更新中-) 第一阶段 javaSE(完结) 序号 标题 内容 001 java初识 java语言特点.体系结构.运行机制 002 java SE基础语法 注释.关键字.变量. ...

  7. 我的Java学习之路2009-11-17

    -------------------------------2009年3月19日开始----------------------------- 下载JDK Myeclipse Netbeans JB ...

  8. 菜鸟haqima的Java学习之路第一天

    菜鸟haqima的Java学习之路第一天 导读:DOS命令 常用快捷键 Java的简单概述 (第一章 Java开发环境的搭建) 1.常用的DOS命令 1.1.怎么打开DOS命令窗口 win键+r(组合 ...

  9. Java学习之路02_选择方向_旺旺老师

    提示:请您先阅读第一部分:Java学习之路01_软件江湖_旺旺老师 第二部分:帮派之争 就好像玩游戏要先选择角色种族,进入江湖要先选择帮派,那搞软件开发也要选择方向.个人总结的软件开发的方向:嵌入式开 ...

  10. Java学习之路-预科

    Java学习之路-预科 第一章 学习计算机的基本知识 文章目录 Java学习之路-预科 前言 一.什么是计算机? 二.硬件及冯诺依曼结构 1.计算机硬件 1.1 计算机硬件组成 1.2 什么是装机 1 ...

最新文章

  1. python可视化:matplotlib学习笔记
  2. java高效编程_Java高效编程
  3. 文本挖掘之文本相似度判定
  4. mysql实时增量备份
  5. Alibaba Nacos 服务消费者工程接入nacos并实现调用服务提供者工程
  6. php判断微信版本,判断是否是微信访问并获取版本号
  7. edge无法打印pdf_一文搞定PDF无法复制/打印/编辑
  8. android真实项目教程(七)——梦醒边缘花落_by_CJJ
  9. 【毕业答辩】毕业设计答辩前期准备
  10. 命令折叠代码的所有部分?
  11. 你应该知道的RPC原理
  12. 在PADS中如何导出PCB封装库
  13. 《Using OpenRefine》翻译~8
  14. 江苏省泰州市谷歌高清卫星地图下载
  15. 天津大学仁爱学院2014计算机系毕业晚会,天津大学仁爱学院什么专业好
  16. python基础----文件处理
  17. 表情符号(emoji)大全,只此一文便够了
  18. CSDN实训 - Java模拟二次验证码(动态令牌)
  19. 传递给数据库 'master' 中的日志扫描操作的日志扫描号无效
  20. 浅谈主键索引与唯一索引

热门文章

  1. C++11在加入<thread>头文件后Socket服务器接收不到消息
  2. c语言如何找一个数的ac码,详细解析C语言中的开方实现
  3. 房产管理信息系统 oracle,房地产企业项目信息管理系统|案场管理系统
  4. mybatis 依赖于jdbc_第1章 MyBatis快速入门
  5. druid 手动指定数据源_Spring Boot2 系列教程(二十)整合JdbcTemplate 多数据源
  6. UGUI 图片灰显裁剪
  7. matplotlib——散点图
  8. oracle存储过程可以回退吗,Navicat 运行 Oracle 存储过程示例
  9. EDA实验课课程笔记(六)——NC-verilog的介绍与使用(二)
  10. sybase 设置默认值_[转]SYBASE 数据库操作笔记