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. 一开始类型信息是有用的,但随后可以只在真正需要时才加上类型信息

读Java8函数式编程笔记01_Lambda表达式的更多相关文章

  1. Java8函数式编程以及Lambda表达式

    第一章 认识Java8以及函数式编程 尽管距离Java8发布已经过去7.8年的时间,但时至今日仍然有许多公司.项目停留在Java7甚至更早的版本.即使已经开始使用Java8的项目,大多数程序员也仍然采 ...

  2. Java8函数式编程和lambda表达式

    文章目录函数式编程JDK8接口新特性函数接口方法引用函数式编程函数式编程更多时候是一种编程的思维方式,是一种方法论.函数式与命令式编程区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉 ...

  3. Java8函数式编程探秘

    引子 将行为作为数据传递 怎样在一行代码里同时计算一个列表的和.最大值.最小值.平均值.元素个数.奇偶分组.指数.排序呢? 答案是思维反转!将行为作为数据传递. 文艺青年的代码如下所示: public ...

  4. [2017.02.23] Java8 函数式编程

    以前学过Haskell,前几天又复习了其中的部分内容. 函数式编程与命令式编程有着不一样的地方,函数式编程中函数是第一等公民,通过使用少量的几个数据结构如list.map.set,以及在这些数据结构上 ...

  5. Java8 函数式编程详解

    Java8 函数式编程详解 Author:Dorae Date:2017年11月1日23:03:26 转载请注明出处 说起Java8,可能很多人都已经知道其最大的改进,就是引入了Lambda表达式与S ...

  6. Java 函数式编程(Lambda表达式)与Stream API

    1 函数式编程 函数式编程(Functional Programming)是编程范式的一种.最常见的编程范式是命令式编程(Impera Programming),比如面向过程.面向对象编程都属于命令式 ...

  7. 关于Java8函数式编程你需要了解的几点

    函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...

  8. Java8函数式接口以及lambda表达式实践

    罗列一下遇到可以转换成lamada表达式的场景,仅供参考,如有更好的方式,欢迎在评论区留言. 1.计算订单总金额 订单总金额一般是在后台循环叠加每个购买商品的金额已获取到,通常的方式如下 BigDec ...

  9. [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念

      本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...

  10. java8函数式编程(转载)

    1. 概述 1.1 函数式编程简介 我们最常用的面向对象编程(Java)属于命令式编程(Imperative Programming)这种编程范式.常见的编程范式还有逻辑式编程(Logic Progr ...

随机推荐

  1. Spring Boot 项目自定义 banner

    前言 我们在启动 Spring Boot 项目时,控制台会打印出 Spring Boot 专属的标语,也称 banner(横幅标语/广告),效果如下: 实际上,上面这个 banner,我们可以自定义, ...

  2. python枚举类型 Enum

    在python中枚举是一种类(Enum) 枚举类中不能存在相同的标签名 枚举是可迭代的 例: from enum import Enum class Vip(Enum): MONDAY = 0 TUE ...

  3. 【题解】CF631B Print Check

    题面传送门 解决思路: 首先考虑到,一个点最终的情况只有三种可能:不被染色,被行染色,被列染色. 若一个点同时被行.列染色多次,显示出的是最后一次被染色的结果.所以我们可以使用结构体,对每一行.每一列 ...

  4. 【题解】P7860 [COCI2015-2016#2] ARTUR

    题面传送门 好题. 主要思路和另一位巨佬差不多,详细讲一下判断的部分. 解决思路: 首先考虑本题与拓扑排序有和关系.可以想到,某些棍子的先后移动顺序是有限制的.比如: 这里红色的必须比蓝色的先移动,因 ...

  5. gRPC(Java) keepAlive机制研究

    基于java gRPC 1.24.2 分析 结论 gRPC keepAlive是grpc框架在应用层面连接保活的一种措施.即当grpc连接上没有业务数据时,是否发送pingpong,以保持连接活跃性, ...

  6. [Polkadot] 波卡链学习笔记

    前言 早已听闻波卡链大名,但从未真正静下心来了解.最近难得有些属于自己的时间了,故将学习到的记录下来. 介绍 相信大家对波卡链都有些许了解,在这我就长话短说,简单介绍一下. Polkadot是由Web ...

  7. Oracle 插入时间戳id函数func_getnewid()

    在Oracle数据库中出入以时间戳为id的最简单方法运用func_getnewid()函数: select func_getnewid(30) from dual; id长度可调

  8. shell编写循环检查脚本

    背景:如下脚本实现当微服务重启后,检查微服务的启动端口正常,可通过轮询的方式来实现所需要用到配置文件config.properties信息如下: onlineService:8001 algorthS ...

  9. PostgreSQL常用操作合辑:时间日期、系统函数、正则表达式、库表导入导出、元数据查询、自定义函数、常用案例

    〇.参考地址 1.pg官方文档 http://www.postgres.cn/docs/9.6/index.html 2.腾讯云仓pg文档 https://cloud.tencent.com/docu ...

  10. 【SQL知识】SQL中的join操作总结:内连接、外连接(左右全)

    一.含义 基于表之间的共同字段,把来自两个或多个表的行结合起来 二.分类 内连接:join / inner join 外连接:left join / right join / full outer j ...