一、函数式编程

1.什么是函数式编程

函数式编程是种编程方式,是一种编程的思维,它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。它的地位等同于面向对象,面向过程,它将电脑运算视为函数的计算

2.函数式编程的特点

(1)可以把函数作为参数传递给另一个函数,可以返回一个函数。从程序员的角度看,就是可以接受函数当作输入(参数)和输出(返回值)

(2)闭包:由函数(环境)及其相关的引用环境组合而成的实体(闭包=函数+引用环境),在函数式编程中充当着

详解:当内嵌函数引用到该函数作用域外的的变量时,将会把定义时涉及到的引用环境和函数体打包成一个整体(闭包)返回实例,这些实例之间是隔离的,分别包含调用时不同的引用环境现场

(3)高阶函数

在函数式编程中,函数是一阶值,函数可以作为另一个函数的参数或返回值,可以赋给一个变量。函数可以欠嵌套定义,即在一个函数内部可以定义另一个函数

(4)函数是“一等公民”

即函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值

(5)不修改状态、没有副作用

函数要保持独立,不包含任何赋值语句,不修改系统变量,所有功能就是返回一个新的值,没有其他行为

3.标准格式

由以下三部分组成:

  • (参数1,参数2,参数3,......)
  • ->
  • { 代码块 }

注意事项:

(1)第一部分中参数可有可无,多个参数用逗号隔开;参数类型可省略;如果参数只有一个,则 () 可以省略

(2)如果第三部分只有一行代码,无论是否有返回值,则可以省略 '{}'   'return'   ';'    。并且这三部分要么一个都不省略,要么一起省略

4.实战使用

(1)Lambda替代多线程匿名内部类

public class Test {

    public static void main(String[] args) {

        new Thread(()->{
System.out.println("开启新线程");
}).start();
}
}

(2)Lambda替代自定义匿名内部类

①首先定义一个电脑类

public interface Computer {
public abstract void powerUp();
}

①然后定义一个用户类

public class person {

    public static void opComputer(Computer computer){
computer.powerUp();
} public static void main(String[] args) {
opComputer(()->{
System.out.println("The computer is running!");
});
}
}

(3)Lambda替代集合、数组匿名内部类

import java.util.Arrays;

public class mySort {
public static void main(String[] args) { Integer[] list = {1,9,5,3,7,4,6,8,2};
Arrays.sort(list,(Integer x,Integer y)->{
return x - y;
}); for (Integer integer : list) {
System.out.println(integer);
}
}
}

(4)省略写法

import java.util.Arrays;

public class mySort {
public static void main(String[] args) { Integer[] list = {1,9,5,3,7,4,6,8,2};
Arrays.sort(list,(x,y)-> x - y); for (Integer integer : list) {
System.out.println(integer);
}
}
}

Java第二十八天,Lambda表达式的更多相关文章

  1. Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】

    原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...

  2. java 8 中lambda表达式学习

    转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...

  3. Lambda 表达式,Java中应用Lambda 表达式

    一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...

  4. Java 8中Lambda表达式默认方法的模板方法模式,你够了解么?

    为了以更简单的术语描述模板方法,考虑这个场景:假设在一个工作流系统中,为了完成任务,有4个任务必须以给定的执行顺序执行.在这4个任务中,不同工作流系统的实现可以根据自身情况自定义任务的执行内容. 模板 ...

  5. [Java 8] (9) Lambda表达式对递归的优化(下) - 使用备忘录模式(Memoization Pattern) .

    使用备忘录模式(Memoization Pattern)提高性能 这个模式说白了,就是将需要进行大量计算的结果缓存起来,然后在下次需要的时候直接取得就好了.因此,底层只需要使用一个Map就够了. 但是 ...

  6. [Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .

    递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer).但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError.处理这个问题,我们可 ...

  7. Java中的Lambda表达式简介及应用

    在接触Lambda表达式.了解其作用之前,首先来看一下,不用Lambda的时候我们是怎么来做事情的. 我们的需求是,创建一个动物(Animal)的列表,里面有动物的物种名,以及这种动物是否会跳,是否会 ...

  8. 在Android中使用Java 8的lambda表达式

    作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...

  9. 【转】Java 8十个lambda表达式案例

    1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable() { @Override public ...

  10. Java 8十个lambda表达式案例

    1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable() { @Override public ...

随机推荐

  1. JAVAEE学习day06,面向对象

    1.面向对象与面向过程思想 什么时面向过程: 面向过程的每一个步骤和过程,把每一个步骤和过程完成,然后又这些功能相互调用,完成需求 强调的时过程,所有的事情都需要自己完成 什么时面向过程: 面向对象思 ...

  2. yarn安装Electron提示安装正常却实际没有安装的解决

    起因 使用Quasar框架开发Electron软件,配置好后发现electron没有正常安装,但是yarn却一本正经的胡说八道:不不不,electron已经在那里了.打开模块安装目录一看还真有elec ...

  3. javaScript 基础知识汇总 (十五)

    1.模块简介 什么是模块: 模块就是一个文件,一个脚本,通过关键字export 和 import 交换模块之间的功能. export 关键字表示在当前模块之外可以访问的变量和功能. import 关键 ...

  4. 有关EPX Studio使用DELPHI5作为基础环境版本的说明

    英巴卡迪诺北京科技有限公司,地址是北京市朝阳门外大街18号丰联广场B座813B,这家公司这家公司不拥有:delphi 1.0~delphi7.0 .delphi 2005版本的著作权,这些都还是属于B ...

  5. main.c(53): error: #268: declaration may not appear after executable statement in block

    这个问题是在编译STM32的程序时遇到的,这个错误的原因是对于变量的声明不能放在可执行语句后面,必须在主函数开头声明变量.在程序中声明一个变量时,需要在可执行语句之前声明,否则会出现以上错误.

  6. Spring Boot框架——快速入门

    Spring Boot是Spring 全家桶非常重要的一个模块,通过 Spring Boot 可以快速搭建一个基于 Spring 的 Java 应用程序,Spring Boot 对常用的第三方库提供了 ...

  7. 使用@property 添加width 和 height 属性

    @property Python内置的@property装饰器就是负责把一个方法变成属性调用的: class Screen(object): def isint(self,px): if not is ...

  8. vue 指令,成员,组件

    目录 复习 v-once指令 v-cloak指令(了解) 条件指令 v-pre指令(了解) 循环指令 todolist留言板案例 实例成员 - 插值表达式符号(了解) 计算属性 属性监听 组件 局部组 ...

  9. [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example because scrolling is in progress and cannot be interrupted

    字面意思大概就是: [干预]忽略尝试取消带有cancelable = false的touchmove事件的尝试,例如,因为滚动正在进行并且无法中断. 解决方法: 1.添加样式更改 将滑动报错的标签样式 ...

  10. WePY的开发环境的安装

    2020-03-24 1.安装Node.js 官网:https://nodejs.org/ 两个版本 LTS为稳定的长期支持版本 Current为最新的版本 安装完毕后,cmd下输入 node -v ...