JavaSE_lambda表达式 Stream流 Option类

Java_lambda表达式 Stream流 Option类进行总结和简要介绍

1 Lambda表达式

1.1 作用

  • 为了简化匿名内部类的书写

1.2 思想

  • 函数式编程思想 : 强调的是结果 , 而不强调过程

1.3 使用的前提

  • Lambda表达式只能作用在函数式接口

函数式接口 : 只有一个抽象方法需要重写的接口 , @FunctionalInterface注解用来校验一个接口是否属于函数式接口

1.4 格式

一般格式 : () -> { }

  • ( ) : 代表的接口中唯一抽象方法的形参,有就写,没有就空着
  • -> : 用箭头指向后面后面要做的事情
  • { } : 代码块,代表方法体的内容,要做的事情

1.5 简化规则

  • 参数类型可以省略,但有多个参数的情况下,不能只省略一个,要省略都的省略
  • 如果参数有且仅有一个,那么小括号可以省略
  • 如果代码块的语句只有一条,可以省略大括号和分号,甚至是return,要省略全部都要省略不能省略某一个 举例 :
    简化前 : (int a, int b) -> { return a+ b ;}
    简化后 : (a , b) -> a+b

注意 : 三个条件满足哪个就可以简化哪个

2 Stream流

2.1 作用

  • 对数组和集合中元素的筛选和过滤进行简化操作

2.2 获取Stream流

  1. 单列集合
  2. Collection接口中的默认方法Stream(),返回一个Stream流 (本质返回的Stream接口的实现类对象,底层实现)
  3. 双列集合
  4. 先通过双列集合的方法 keySet() 或 entrySet() 得到单列的键值Set集合或键值对Set集合,然后原理就同单列集合使用Stream流方式类同
  5. 数组
  6. Arrays 中的静态方法Stream(),返回一个Stream流
  7. 同类型多个数据
    -Stream.of(T … t )

2.3 中间方法 (方法的返回值都是Stream流对象,可以链式编程)

  • Stream filter(Predicate predicate )
    作用 : 对流中的数据进行过滤,
  • Predicate 是一个函数式接口,可以用Lambda表达式, 其接口中的方法 : boolean test(T t) 对给定的参数进行判断,返回一个布尔值,true表示此元素留下了,false与之相反
  • Stream limit(long maxSize)
    作用: 截取指定参数个数的数据
  • 截取Stream流中前 maxSize 个元素
  • Stream skip(long n)
    作用 : 跳过指定参数个数的数据
  • static Stream concat(Stream a, Stream b)
    作用 : 合并a和b两个流合成一个流
  • Stream map (Function
    作用 : 将流中的元素类型进行转换
  • Function
  • 泛型T : 表示的流中的元素类型
  • 泛型R : 表示的是把流中的元素转成的目标类型
  • Stream distinct()
    作用 : 去除流中重复的元素,依赖(hashCode和equals方法)
  • Stream sorted()
    作用 : 将流中的元素按照自然排序的规则排序
  • Stream sorted(Comparator comparator) 作用 : 将流中的元素按照自定义比较器的规则排序

2.4 终结方法

  • void forEach( Consumer action)
    作用: 对此流的每个元素执行操作,一般用于遍历集合
  • Consumer 是函数式接口, 接口中唯一需要重写的抽象方法 void accept(T t)
  • forEach方法会循环遍历拿到流中的每一个数据,在把每个数据传递给Lambda表达式的形参
  • Lambda表达式 : (String s) ->
  • long count()
    作用 : 返回此流中的元素的个数

2.5 Stream流的收集操作

  • 由于Stream流中无法直接修改集合,数组等数据源中的数据,所以需要对Stream流进行收集操作
  • R collect(Collector collector) : 此方法只负责收集流中的数据,创建集合添加数据动作需要依赖于参数
  • 工具类Collectors提供了具体的收集方式
  • public static Collector toList():把元素收集到List集合中
  • public static Collector toSet():把元素收集到Set集合中
  • public static Collector toMap(Function keyMapper,Function valueMapper):把元素收集到Map集合中

3 Optional类

3.1 作用

  • 是一个可以为null的容器对象, 只存在则isPresent()方法会返回true,主要用于进行非空判断,主要是一种对空值判断的规范

3.2 API

  • public static Optional ofNullable(T value)
    作用 : 通过指定值构建一个Optional容器,如果值为null则返回Optional.empty 返回值为Optional对象,可以链式编程
  • public boolean isPresent()
    作用 : 如果Optional中存储的对象为null返回的是false,如果对象不为null返回的是true

Original: https://www.cnblogs.com/epicenter/p/16322560.html
Author: Epicenter
Title: JavaSE_lambda表达式 Stream流 Option类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/592385/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 浅谈Java中linkedlist和arraylist区别

    在Java中,关于集合框架有这样一个体系结构:其主要由两个接口派生而出:Collection和Map,然后再衍生出各自的一些实现类(比如Collection接口又被继承与Set和L…

    Java 2023年6月7日
    090
  • RabbitMQ——消息可靠性投递

    一。什么是消息可靠性投递? 1.保证消息百分百发送到消息队列中去 a.保证mq节点成功接受消息 b.消息发送端需要接受到mq服务端接受到消息的确认应答 c.完善的消息补偿机制,发送…

    Java 2023年5月30日
    0102
  • 2018年最新JAVA面试题总结之基础(1)

    转自于:https://zhuanlan.zhihu.com/p/39322967 1、JAVA中能创建volatile数组吗?volatile能使得一个非原子操作变成原子操作吗?…

    Java 2023年6月13日
    0120
  • SpringBoot快速入门

    SpringBoot笔记 1.开端介绍 1.两种核心配置文件同时存在(properties的优先级高于yml) 2.多环境下核心配置文件 3.获取自定义配置 4.将自定义配置映射到…

    Java 2023年6月9日
    092
  • Dism++

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    081
  • 003-博学谷-年度钻石C++/C-Unix/Linux(2)

    常用命令 3.1 概述 很多人可能在电视或电影中看到过类似的场景,黑客面对一个黑色的屏幕,上面飘着密密麻麻的字符,梆梆一顿敲,就完成了窃取资料的任务。 Linux 刚出世时没有什么…

    Java 2023年6月7日
    0131
  • fastposter发布1.4.3 跨语言的海报生成器

    fastposter发布1.4.3 跨语言的海报生成器 v1.4.3 增加golang语言支持,优化生成器代码,完善官方文档 昨天喝了点小9️⃣,发版慢了些。 future: 增加…

    Java 2023年6月5日
    097
  • VMware中虚拟机与主机不能ping通解决办法

    先去看看服务全部启动了没? VMware相关服务启动关闭脚本 启动了还报错,接着往下看。。。。。。 一、如果是 桥接模式,那么 可能性1:虚拟机防火墙禁ping,请关闭虚拟机防火墙…

    Java 2023年5月30日
    090
  • Canal高可用架构部署

    一、前言 canal 是阿里的一款开源项目,纯 Java 开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB)。 ca…

    Java 2023年6月6日
    093
  • Linux 运行jar包提示 no main manifest attribute

    解决办法:在pom文件中添加如下依赖 解释: 在sprinboot项目中pom.xml文件加 ****,代表maven打包时会将外部引入的jar包(比如在根目录下或resource…

    Java 2023年6月5日
    0106
  • SpringBoot-swagger

    SpringBoot整合swagger SpringBoot-swagger 13.1 导入相关依赖 io.springfox springfox-swagger-ui 2.9.2…

    Java 2023年6月5日
    097
  • Skywalking-10:Skywalking查询协议——GraphQL

    GraphQL GraphQL 基础 参照Getting started with GraphQL Java and Spring Boot这篇文章学习即可 PS:可以使用 bre…

    Java 2023年6月5日
    095
  • Mysql学习笔记-InnoDB深度解析

    前言我们在上一篇博客聊了Mysql的整体架构分布,连接层、核心层、存储引擎层和文件系统层,其中存储引擎层作为Mysql Server中最重要的一部分,为我们sql交互提供了数据基础…

    Java 2023年6月5日
    099
  • cv :: Mat线程安全吗(原子分配+引用计数)?

    Is cv::Mat thread-safe (atomic assignment + refcounting)? https://isocpp.github.io/CppCore…

    Java 2023年5月29日
    085
  • 15分钟学会JWT使用

    什么是JWT? JSON Web Token ,通过数字签名的方式,以JSON对象为载体,在不同的服务终端之间安全的传输信息。 jwt 可以生成 一个加密的token,做为用户登录…

    Java 2023年6月9日
    078
  • 8、线程休眠

    8、线程休眠 每个对象都有一把锁,sleep不会释放锁; package com.testthread1; public class TestThread3 implements …

    Java 2023年6月8日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球