• 函数式编程02


    1.Stream流注意事项:

    惰性求值就是要求我们写终结操作。

    第二个:

    显然第一个foreach终结操作后,流就结束了,我们的得重新开始,不然就报错。

     第三个是在正常操作下符合的,不正常操作下:

    这种又丑又危险的代码不要写哦

    2.Optional 概述

    这能让我们写出优雅而安全的代码

     例一:

     空指针异常

     3.Optional的使用

     创建对象

    例一:

    一个匿名内部类一个lambda

     后面有一个消费的术语,这其实就来自于Consumer这个类,它在Optional的操作中挺重要的。

    ifPresent里含有判断是否为空,所以可以安全地输出。

     如果author不是空的:

     那authorOptional里面封装的Value就是返回的author

    还有,这里是不是感觉也没有简化和优雅呢?这主要是因为这个getAuthor不太好,下面我们写个直接返回optional对象的:

    optiona.empty()

     综上,显然ofNullable()最方便

     源码:

    安全的消费值

     消费就是这个:

     安全地获取值

    首先不推荐的是get()

    源码:

     

     安全的方法:

     

     

    下面这个若为空就抛出异常,在spring框架中常常使用。

     过滤

    不记得就用匿名内部类然后idea右键后一键生成lambda表达式:

     

     Predicate泛型抽象接口只有唯一的抽象方法,其他都是默认方法default

     判断

    数据转换 

     4.函数式接口

    定义

    常见接口 

    Consumer Function Predicate,这些都不用记,我们需要重写的地方,我们右键生成匿名内部类它自己会提示的,记住,不要死记硬背,计算机有那么多东西,有些东西是不值得你去花太多时间的。

     

     常用的默认方法

    and

    实际上这两个判断条件完全可以写在一个函数体里面会更方便,所以and一般不用在这里,而是用在下面这种自定义的函数里:

    例:

     

    这个函数的if里面predicate predicate2都要满足,用的时候给这个函数传入两个匿名内部类

     

     或者lambda

     or

     negate

     5.方法引用(了解即可)

     

     语法详解

    引用类的静态方法

     

     引用对象的实例方法

     

     引用类的实例方法

     

     ——>

     构造器引用

     

    全部优化后:

     

     6.高级用法

    基本数据优化

     在这里第二个map:

     age是integer类型的,所以+10时要拆箱成int,然后再包装成integer返回

    filter这里的比较也是一样,有开销的。

     优化:

    不过你看这些括号传入的类要稍微记一下

     

     并行流

     

     例子

    单个线程:

     

     并行:

     加了个parallel后就会有多个线程,比如有三个线程,1-4在第一个线程进入下面的filter reduce,5-6在第二个线程,7-10在第三个线程被操作,从而提高效率(数据流大的情况下)。

    调试:

    peek是Stream里面的调试方法,中间操作

    结果:

     而如果不用并行:

     则全部都是在主线程里面。

     所以parallel可以把串行流转化为并行流

    还有一个方法:

     parallelstream直接得到的就是并行流

  • 相关阅读:
    C++11——多线程
    当EAI遇见RPA:破解接口难题,助力数据打通
    Wayfair EDI 850订单详解
    STM32单片机OLED俄罗斯方块单片机小游戏
    PHP 5 SimpleXML 函数
    【11.15】Codeforces 刷题
    java计算机毕业设计高等数学试卷系统源码+mysql数据库+系统+lw文档+部署
    regionserver请求不均匀
    微服务技术栈
    学编程的难度到底有多大?
  • 原文地址:https://blog.csdn.net/keepstrivingchy/article/details/126809227