• 函数式编程的执行是惰性的,按顺序真正执行的时候才会执行相应的代码、方法;
  • 函数式编程是安全的,用的是monad架构
 1 public class StreamTest {
2
3 public static void main(String[] args){
4 //用map和filter代替for循环换取可读性,是有效率代价的
5 Optional<Integer> optional=Stream.of(1,2,3,4,5)
6 .map(x->x*x) //非终止操作:遍历,返回一个新的流数组Stream<Integer>,不改变原流数组
7 .filter(x->x<10) //非终止操作:筛选,返回一个数组流Stream<Integer>
8 .reduce(Math::max); //终止操作:数组按顺序流进'数据流管道',再两两比较,找出数组流中最小的值并返回,用Optional包装后返回 Optional<Integer>。返回Optional<Integer>比返回Integer更安全,区别是若Stream流是空的,则Math.min()会传入两个空值比较,进而报异常,这个异常被Optional捕捉并封装,同时Optional返回一个空值
9 System.out.println(optional.get());//Math::min返回1,Math::max返回9
10
11 Integer i= IntStream.of()
12 .reduce(Math::max) //终止操作:数组按顺序流进'数据流管道',再两两比较,找出数组流中最小的值并返回,用Optional包装后返回 Optional<Integer>。返回Optional<Integer>比返回Integer更安全,区别是若Stream流是空的,则Math.min()会传入两个空值比较,进而报异常,这个异常被Optional捕捉并封装,同时Optional返回一个空值
13 .orElse(0); //终止操作:若reduce没有返回值,则返回Integer型的0
14 System.out.println(i);//返回0
15
16 Stream<Integer> s=Stream.of(1,2,3,6,4,5).sorted();//对原流数组进行排序后返回:123456
17 s.forEach(System.out::print);//排序返回:1,2,3,4,5,6
18
19 System.out.println();
20 Stream.of("afei","afei1")
21 .flatMap(st->st.chars().mapToObj(stt->(char)stt)) //将多个字串合并成一个,并把合并后字串的每个字符先转成IntStream流,再合并成Charactor型的Stream流数组
22 .collect(Collectors.toSet()) //转成Charactor型Set集合
23 .stream() //转成Charactor型流数组
24 .collect(Collectors.toList()) //转成Charactor型List
25 .forEach(System.out::print); //遍历List
26
27 //获取一个随机数组合,该组合有100W个数
28 Random r=new Random();
29 IntStream.range(0,1000000) //步长1,生成1000000个数的int元素流数组
30 .map(x->r.nextInt(1000000)) //遍历流数组每个元素,每次返回0-1000000间的一个数,最后返回一个int类型的流数组
31 .boxed() //对流数组里每个int元素装箱,返回Integer元素的流数组
32 .collect(Collectors.toList());//将Integer元素的流数组转为List数组
33
34
35
36
37 }
38 }

java中的stream是啥?的更多相关文章

  1. java中的Stream流

    java中的Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带 ...

  2. java中的stream的泛型方法的使用示例

    本文章使用jdk8测试 ,并结合使用lambda测试 测试前准备一些测试数据: class ObjectDemo { private Integer id; private String name; ...

  3. java中的stream的Map收集器操作

    package test9; import java.util.Collections; import java.util.HashSet; import java.util.Map; import ...

  4. 双层for循环用java中的stream流来实现

    //双重for循环for (int i = 0; i < fusRecomConfigDOList.size(); i++) { for (int j = 0; j < fusRecomC ...

  5. 关于java中Stream理解

    关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator.它代表着数据流,流中的数据元素的数量可以是有限的, 也可 ...

  6. Java中的文件和stream流的操作代码

    1.Java中FileRead方法的运用代码及详解 package example2;import java.io.FileReader;import java.io.IOException;clas ...

  7. 怎么在java 8的map中使用stream

    怎么在java 8的map中使用stream 简介 Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java 8引入了Stream的概念,那么我们怎么在Map中使用S ...

  8. Java中的函数式编程(六)流Stream基础

    写在前面 如果说函数式接口和lambda表达式是Java中函数式编程的基石,那么stream就是在基石上的最富丽堂皇的大厦. 只有熟悉了stream,你才能说熟悉了Java 的函数式编程. 本文主要介 ...

  9. Java中的函数式编程(八)流Stream并行编程

    写在前面 在本系列文章的第一篇,我们提到了函数式编程的优点之一是"易于并发编程". Java作为一个多线程的语言,它通过 Stream 来提供了并发编程的便利性. 题外话: 严格来 ...

随机推荐

  1. 说说对 SQL 语句优化有哪些方法?(选择几条)

    1.Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可 以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后. 2.用 EXISTS 替代 ...

  2. Javascript Range对象的学习

    Range对象有几个特别难理解的属性,这里学习总结下 Range.startOffset:返回一个表示 Range 起点在 startContainer 中的位置的数字.此属性的值与Range.sta ...

  3. 如何在 Microsoft word中插入代码

    一.工具 方法1.打开这个网页PlanetB; 方法2.或者谷歌搜索syntax highlight code in word documents,检索结果的第一个.如下图: PS. 方法1和2打开的 ...

  4. stm32CubeMX+keil5好用还是stm32CubeID好用

    cubemx是图形配置软件, 可以节省往常配置IO口的时间, cubemx主推hal库, 它是生成keil工程的工具 cubemx生成的工程可以用keilv5编程软件来编辑... 用Cube mx定义 ...

  5. EMC EMI EMS定义与区别

    一.EMC EMI EMS定义: EMC(ElectromagneticCompatibility) 电磁兼容,是指设备或系统在电磁环境中性能不降级的状态.电磁兼容,一方面要求系统内没有严重的干扰源, ...

  6. 切图崽的自我修养-[ES6] 迭代器Iterator浅析

    Iterator 这真是毅种循环 Iterator不是array,也不是set,不是map, 它不是一个实体,而是一种访问机制,是一个用来访问某个对象的接口规范,为各种不同的数据结构提供统一的访问机制 ...

  7. Chrome 已经原生支持截图功能,还可以给节点截图!

    昨天 Chrome62 稳定版释出,除了常规修复各种安全问题外,还增加很多功能上的支持,比如说今天要介绍的强大的截图功能. 直接截图 打开开发者工具页面,选择左上角的元素选择按钮(Inspect) W ...

  8. 【Android开发】LogcatView,手机中查看logcat神器

    先上图 集成: 1, allprojects { repositories { ... maven { url 'https://www.jitpack.io' } } } 2, dependenci ...

  9. .NET程序设计实验三

    实验三  Windows 应用程序开发 一.实验目的 1. 掌握窗口控件的使用方法: 2. 掌握Windows 的编程基础. 二.实验要求 根据要求,编写 C#程序,并将程序代码和运行结果写入实验报告 ...

  10. 动态div点击事件传递对象参数格式-草稿889

    <button type='button' style='border: 1px solid #eeeeee;color: #717070;height: 20px;border-radius: ...