java8新特性1:lambda表达式和函数式接口
1、lambda的介绍:
1.1、为什么java语言需要引入lambda表达式?
java语言诞生于1995年,历史时间已经相对较长了。在其后的各种新型编程语言中,都有着lambda表达式的内容,并且受到了大家的好评,因此,java语言也相想要“抄”过来。(小声逼逼)下面是一个较为官方的解释:

1.2、python中的lambda表达式
a = lambda x,y,z:(x+8)*y-z
1.3、js中ES6语法中的lambda表达式(又称为箭头函数)
function foo() {
this.a = 1
let b = () => console.log(this.a)
b()
}
1.4、其他、就不一一列举了
2、java中的六种lambda的写法
java中lambda的本质:作为接口的实例
2.0、普通写法
@Test
public void test01() {
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("hello java8");
}
};
r1.run();
}
2.1、语法格式一:无参、无放回值的写法
@Test
public void test2() {
//Lambda表达式的写法
Runnable r = () -> System.out.println("hello java8");
}
2.2、语法格式二:Lambda 需要一个参数,但是没有放回值
@Test
public void test3() {
Consumer<String> con = (String s) -> {
System.out.println("ssssss");
};
con.accept("sss");
}
2.3、语法格式三:数据类型可以省略,因为可以由编译器推断得出,成为“类型推断”
@Test
public void test4() {
Consumer<String> con = (s) -> {
System.out.println("ssssss");
};
con.accept("sss");
}
2.4、语法格式四:Lambda 若只需要一个参数时,参数的小括号可以省略
@Test
public void test5() {
Consumer<String> con = s -> {
System.out.println("ssssss");
};
con.accept("sss");
}
2.5、语法格式五:Lambda 需要两个或者两个以上的参数,多条执行语句,并且可以有放回值
@Test
public void test6() {
Comparator<Integer> com1 = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
};
System.out.println(com1.compare(3,5));
System.out.println("==================================");
Comparator<Integer> com2 = (o1, o2) -> {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(o2);
};
System.out.println(com2.compare(3,5));
}
2.6、语法格式六:当Lambda 体只有一条语句时,return 与大括号若有,都可以省略
@Test
public void test7() {
Comparator<Integer> com2 = (o1, o2) -> o1.compareTo(o2);
System.out.println(com2.compare(3,5));
}
3、函数式接口

函数式接口的使用,使的我们可以将方法当作参数来传递。在调用时,lambda 表达式作为参数来使用。换句话说,当一个方法的参数是 lambda 表达式时,这个参数类型一定是函数式接口。
下面是一个函数接口的例子:
/**
* 函数式接口,只有一个抽象方法的接口
*/
@FunctionalInterface
public interface MyInterface {
void method1();
// void method2();
}
java内置的4大核心函数式接口:

使用举例

其他的一些函数式接口:

java8新特性1:lambda表达式和函数式接口的更多相关文章
- Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...
- java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合
java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合 比如,我有一张表: entity Category.java service CategoryServic ...
- Java8 新特性之Lambda表达式
1. Lambda 表达式概述 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递); Lambda 表达式可以写出更简洁,更灵活的代码 ...
- 【Java8新特性】Lambda表达式基础语法,都在这儿了!!
写在前面 前面积极响应读者的需求,写了两篇Java新特性的文章.有小伙伴留言说:感觉Lambda表达式很强大啊!一行代码就能够搞定那么多功能!我想学习下Lambda表达式的语法,可以吗?我的回答是:没 ...
- 【Java8新特性】Lambda表达式
一.Lambda 表达式 是什么? Lambda读音:拉姆达. Lambda是一个匿名函数,匿名函数就是一个没有名字的函数. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). ...
- Java8 新特性(一)- Lambda 表达式
2014年3月18日发布了JavaSE 8 不追求技术的新,追求技术的稳定 本质:Lambda 表达式是一个匿名函数 作用:简化代码,增强代码的表达力 Lambda 语法格式 // 格式1:无参无返回 ...
- Java8新特性之Lambda表达式
lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让我们的java程序设计更加简洁.最近新的项目摒弃了1.6的版本,全面基于java8进行开发,本文是java ...
- 夯实Java基础(二十二)——Java8新特性之Lambda表达式
1.前言 Java 8于14年发布到现在已经有5年时间了,经过时间的磨练,毫无疑问,Java 8是继Java 5(发布于2004年)之后的又一个非常最重要的版本.因为Java 8里面出现了非常多新的特 ...
- 【Java8新特性】- Lambda表达式
Java8新特性 - Lambda表达式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...
- java8新特性——四大内置核心函数式接口
在前面几篇简单介绍了一些Lambda表达式得好处与语法,我们知道使用Lambda表达式是需要使用函数式接口得,那么,岂不是在我们开发过程中需要定义许多函数式接口,其实不然,java8其实已经为我们定义 ...
随机推荐
- 了解 go 的 Context
go 的 Context 一直对 go 的 Context 一知半解,不了解其用途,因此在这里着重了解一下 go 语言的 Context 飞雪无情的一个博文对 go 的 Context 讲的比较易懂一 ...
- opencv:二值图像的概念
灰度图像与二值图像 二值分割 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; usi ...
- 【visio】跨职能流程图
归属于 流程图类别 相比于普通流程图,突出了参与流程的组织.部门之间的联系,形式化地说,它突出的是参与流程的对象之间的联系. 它除了表达基本流程,同时也能展示每个每个流程的归属方,让每个对象明确知道自 ...
- 2019南昌网络赛 hello 2019
这道题和一道2017,2016的类似. A string t is called nice if a string “2017” occurs in t as a subsequence but a ...
- Spring 属性依赖注入
1.1 属性依赖注入 依赖注入方式:手动装配 和 自动装配 手动装配:一般进行配置信息都采用手动 基于xml装配:构造方法.setter方法 基于注解装配: 自动装配:struts和spring ...
- IEC 60958 && IEC 61937
IEC 60958 IEC 60958是一种传递数字音频的接口规范,相比I2S,IEC60958通过一根线同时传递时钟信号和数据信号.IEC 60958用来传递两channel,16/20/24bit ...
- 瀑布流无限加载infinitescroll插件与masonry插件使用
masonry官网地址http://masonry.desandro.com/,infinitescroll官网地址http://www.infinite-scroll.com/ 无限滚动原理:无限滚 ...
- 6_9 天平(UVa839)<二叉树的DFS>
前一个ubiquous通信小工具,移动只是一个由弦和电线组成的结构五彩缤纷的东西.这种移动通常被发现悬挂在小婴儿的摇篮.图说明了一个简单的移动.它只是一个电线,悬挂的一个字符串,每一个对象的对象.它可 ...
- C语言与汇编的嵌入式编程:main中模拟函数的调用(两数交换)
编写一个两数交换函数swap,具体代码如下: #include<stdio.h> void swap(int *p1,int *p2) { int temp; temp = *p1; *p ...
- C语言:判断t所指字符串中的字母是否由连续递增字母组成。-判断一个输入的任何整数n,是否等于某个连续正整数序列之和。-将一副扑克牌编号为1到54,以某种方式洗牌,这种方式是将这副牌分成两半,然后将他们交叉,并始终保持编号1的牌在最上方。
//判断t所指字符串中的字母是否由连续递增字母组成. #include <stdio.h> #include <string.h> void NONO(); int fun( ...