Java第二十八天,Lambda表达式
一、函数式编程
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表达式的更多相关文章
- Java 终于有 Lambda 表达式啦~Java 8 语言变化——Lambda 表达式和接口类更改【转载】
原文地址 en cn 下载 Demo Java™ 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件 ...
- java 8 中lambda表达式学习
转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-o ...
- Lambda 表达式,Java中应用Lambda 表达式
一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...
- Java 8中Lambda表达式默认方法的模板方法模式,你够了解么?
为了以更简单的术语描述模板方法,考虑这个场景:假设在一个工作流系统中,为了完成任务,有4个任务必须以给定的执行顺序执行.在这4个任务中,不同工作流系统的实现可以根据自身情况自定义任务的执行内容. 模板 ...
- [Java 8] (9) Lambda表达式对递归的优化(下) - 使用备忘录模式(Memoization Pattern) .
使用备忘录模式(Memoization Pattern)提高性能 这个模式说白了,就是将需要进行大量计算的结果缓存起来,然后在下次需要的时候直接取得就好了.因此,底层只需要使用一个Map就够了. 但是 ...
- [Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .
递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer).但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError.处理这个问题,我们可 ...
- Java中的Lambda表达式简介及应用
在接触Lambda表达式.了解其作用之前,首先来看一下,不用Lambda的时候我们是怎么来做事情的. 我们的需求是,创建一个动物(Animal)的列表,里面有动物的物种名,以及这种动物是否会跳,是否会 ...
- 在Android中使用Java 8的lambda表达式
作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...
- 【转】Java 8十个lambda表达式案例
1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable() { @Override public ...
- Java 8十个lambda表达式案例
1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable() { @Override public ...
随机推荐
- Block详解一(底层分析)
本篇博客不再讲述Block的基本定义使用,最近而是看了很多的block博客讲述的太乱太杂,所以抽出时间整理下block的相关底层知识,在讲述之前,提出几个问题,如果都可以回答出来以及知道原理,大神绕过 ...
- react / config\webpack.config.js 编译后去掉map 减小体积 shouldUseSourceMap = false
react / config\webpack.config.js 编译后去掉map 减小体积 shouldUseSourceMap = false
- 【Weiss】【第03章】练习3.4、3.5:有序链表求交、并
[练习3.4] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∩L2的过程. [练习3.5] 给定两个已排序的表L1和L2,只使用基本的表操作编写计算L1∪L2的过程. 思路比较简单,测 ...
- 一些http知识
一些http知识 前置知识 首先放一张非常经典的计算机网络 关于五层结构 「物理层」「数据链路层」「网络层」「运输层」「应用层」我们依次来讲 我们拿wireshark 抓个http包看一下就能明白各层 ...
- search(3)- elastic4s-QueryDSL
elastic4s是elasticsearch一个第三方开发的scala语言终端工具库(Elastic4s is a concise, idiomatic, reactive, type safe S ...
- ngzorro draw 第一次打开 ERROR TypeError: Cannot read property 'overlayElement' of undefined
at NzDrawerComponent.push../node_modules/ng-zorro-antd/fesm5/ng-zorro-antd.js.NzDrawerComponent.trap ...
- 初步了解HTTP协议
1.HTTP简介 全称:Hyper Text Transfer Protocol,中文名:超文本传输协议. 功能:HTTP是客户端浏览器或其他程序与web服务器之间的应用层通信协议. 特点:a.支持 ...
- vscode快速生成html模板(vscode快捷键"!"生成html模板)
问题: 在vscode中新建test.html, 内容是空白的,输入"!",然后按tap键 ,没有生成常见的html模板,也就是如下: 输入! html html:5 DOCTYP ...
- TensorFlow系列专题(九):常用RNN网络结构及依赖优化问题
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 常用的循环神经网络结构 多层循环神经网络 双向循环神经网络 递归神经网络 ...
- iOS 引用计数
一.简介 OC 在创建对象时,不会直接返回该对象,而是返回一个指向对象的指针. OC 在内存管理上采用了引用计数,它是一个简单而有效管理对象生命周期的方式.在对象内部保存一个用来表示被引用次数的数字, ...