• 函数式编程的执行是惰性的,按顺序真正执行的时候才会执行相应的代码、方法;
  • 函数式编程是安全的,用的是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. 22.2.14session和反反爬处理

    22.2.14 session和反反爬处理 1.session: requests库包含session,都是用来对一个url发送请求,区别在于session是一连串的请求,在session请求过程中c ...

  2. linux更新源管理

    1.备份源 主要防止在更新了新的源之后出现错误情况,备份一下现有的源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.old 2.编辑sourc ...

  3. Material Design with the Android Design Support Library

    Material Design with the Android Design Support Library 原文http://www.sitepoint.com/material-design-a ...

  4. Rabbitmq安装与部署

    一:安装依赖软件Erlang 安装包otp_src_22.3.tar.gz,下载到部署服务器tar -zxvf解压 mv otp_src_22.3 ./erlang变更文件夹名字 可能需要安装的依赖包 ...

  5. Springmvc入门基础(一) ---基于idea创建demo项目

    Springmvc是什么 Springmvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来,如下图: Springmvc处理流程 ---- ...

  6. Mybatis使用拦截器自定义审计处理

    void test_save_1(@Param("relatedBookCategoryEntity") RelatedBookCategoryEntity relatedBook ...

  7. spring-boot-learning-监控相关

    springboot提供了对项目的监控功能,首先我们需要引入需要的jar包: <!--监控包--> <!-- https://mvnrepository.com/artifact/o ...

  8. Java 中,Maven 和 ANT 有什么区别?

    虽然两者都是构建工具,都用于创建 Java 应用,但是 Maven 做的事情更多, 在基于"约定优于配置"的概念下,提供标准的 Java 项目结构,同时能为应用自 动管理依赖(应用 ...

  9. 学习 Haproxy (五)

    1 Linux Haproxy 负载均衡 v1.8 ★★★ 类似于ningx的反向代理1.1 Haproxy 概述 Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热 ...

  10. 遇到的问题之“解决tomcat中文乱码问题”

    方案1:在server.xml中添加了 URIEncoding="UTF-8" 属性 路径:C:\stop\apache-tomcat-8.5.69\conf 修改内容 如若方案1 ...