首页 > 编程语言 >读Java8函数式编程笔记01_Lambda表达式

读Java8函数式编程笔记01_Lambda表达式

时间:2023-01-26 07:44:26浏览次数:45  
标签:5.2 01 5.4 函数 参数 Java8 表达式 Lambda

1. Java 8函数式编程

1.1. 没有单子

1.2. 没有语言层面的惰性求值

1.3. 没有为不可变性提供额外支持

1.4. 集合类可以拥有一些额外的方法:default方法

2. 现实世界中,数据和行为并存

2.1. 面向对象编程是对数据进行抽象

2.2. 函数式编程是对行为进行抽象

3. 函数式编程

3.1. 在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值

3.2. 关心的是如何写出好代码,而不是符合函数式编程风格的代码

3.3. 使用Lambda表达式,就是将复杂性抽象到类库的过程

4. 匿名内部类

4.1. 目的

4.1.1. 为了方便Java程序员将代码作为数据传递

4.2. 传入一个实现某接口的对象

4.3. 显式地声明参数类型

5. Lambda表达式

5.1. 一个匿名方法,将行为像数据一样进行传递

5.1.1. 一种紧凑的、传递行为的方式

5.1.2. 传入了一段代码块——一个没有名字的函数

5.1.3. 无需指定类型,程序依然可以编译

5.2. 形式

5.2.1. 不包含参数,使用空括号()表示没有参数

5.2.2. 包含且只包含一个参数,可省略参数的括号

5.2.3. 可以是一段代码块,使用大括号({})将代码块括起来

5.2.4. 包含多个参数的方法

5.2.5. 显式声明参数类型,此时就需要使用小括号将参数括起来,多个参数的情况也是如此

5.3. 常见结构

5.3.1. BinaryOperator add=(x, y) → x+y

5.4. 引用值,而不是变量

5.4.1. 将变量声明为final

5.4.1.1. 意味着不能为其重复赋值

5.4.1.2. 是在使用赋给该变量的一个特定的值

5.4.1.3. Java8可以引用非final变量,但是该变量在既成事实上必须是final

5.4.2. 未赋值的变量与周边环境隔离起来,进而被绑定到一个特定的值

5.4.2.1. 闭包

5.5. Lambda表达式的类型依赖于上下文环境,是由编译器推断出来的

5.6. 目标类型是指Lambda表达式所在上下文环境的类型

6. 函数接口

6.1. 只有一个抽象方法的接口

6.2. Lambda表达式本身的类型

6.3. 接口中单一方法的命名并不重要,只要方法签名和Lambda表达式的类型匹配即可

6.3.1. 为参数起一个有意义的名字,增加代码易读性

6.4. 

7. 类型推断

7.1. 程序依然要经过类型检查来保证运行的安全性,但不用再显式声明类型罢了

7.2. 省略类型信息可以减少干扰,更易弄清状况

7.3. 需要类型信息帮助理解代码

7.4. 一开始类型信息是有用的,但随后可以只在真正需要时才加上类型信息

标签:5.2,01,5.4,函数,参数,Java8,表达式,Lambda
From: https://www.cnblogs.com/lying7/p/17067543.html

相关文章

  • 20230126 - TurboGears 提示 builtins.NameError Session is not defined
    问题现象:TurboGears 常规操作,运行gearbox服务后报错:builtins.NameError'Session'isnotdefined解决办法:卸载最新版SQLAlchemy1.4,重新安装SQLAlchemy1.3。......
  • 2023-01-25 大年初四手机卡挂失
    2023-01-25周三大年初四,昨天手机被偷走虽然是找回来了手机卡也还回来了。刚好没有牙签卡针这些,我就先夹在手机壳后面了,昨天晚上回来后就发现手机壳里的两张手机卡找不到......
  • 力扣101 对称二叉树
    题目:给你一个二叉树的根节点root,检查它是否轴对称。示例:输入:root=[1,2,2,3,4,4,3]输出:true思路:  对于二叉树是否对称,要比较的是根节点的左子树与......
  • LeetCode正则表达式匹配(lambda/dp)
    lambda表达式[捕获列表](参数列表)mutable(可选)异常属性->返回类型{//函数体}所谓捕获列表,其实可以理解为参数的一种类型,lambda表达式内部函数体在默认情况下......
  • 小技巧,让VS2008打开VS2010的工程
    今天某童鞋想打开老师给的一个VS2010的工程,而其电脑上却没有装VS2010,只装了VS2008,我让其将工程发给我,我的机子也只装了VS2008,打开工程时提示如下:选择的文件是解决方案文......
  • Day01 - HTML&CSS
    1.html介绍简介html叫超文本标记语言,是开发网页的语言html中的标签大多数都是成对出现的,格式:<标签名></标签名>html的定义HTML的全称为:HyperTextMark-upLa......
  • 刷刷刷 Day 22 | 701. 二叉搜索树中的插入操作
    701.二叉搜索树中的插入操作LeetCode题目要求给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入......
  • 230125_50_SpringBoot入门
    SpringBoot实战:员工管理系统1.静态资源导入可以从百度网盘获取资源:链接:https://pan.baidu.com/s/1x-6U_NCNEhIXOq0CcvRW-g提取码:mg94复制这段内容后打开百度......
  • Windows 10 20H2 (Updated 2021-01-24 v19042.746)
    Windows10商业版(含教育版、企业版、专业版、专业教育版、专业工作站版)SHA256:AB9B0CAD001FF218AC5DF17BAB973116CC7B418B4D45F3757F2A3F865F8125F7ed2k://|file|cn_win......
  • 使用VS2019编译EDK2的方法
    原先自己编译的EDK2的情况,有点旧,本次更新EDK2使用2019的编译器编译EDK2需要的工具链如下,自行下载哈:VS2019:Python3.8:​​https://www.python.org/downloads/release/python-......