Lambda表达式(JDK8)
在说Lambda表达式之前,先介绍一下函数式接口
函数式接口
就是只定义了一个抽象方法的接口,我们可以使用注解@Functionallnterface,来强约束这种接口为函数式接口。如Runnable、Callable、Comparator等接口。
Java内置的四大函数式接口:Consumer<T>,Supplier<T>,Function<T,R>,Predicate<T>。
Lambda表达式就是专门用来实现这些函数式接口的表达式。
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
以Runnbale线程为例
Runnable runnable = new Runnable()
{
@Override
public void run()
{
System.out.println("hello lambda!");
}
};
new Thread(runnable).start();
用Lambda表达式则可修改为:
Runnable runnable = ()->{
System.out.println("hello lambda!");
};
new Thread(runnable).start();
其中参数列表:与接口中方法的参数列表要求一致。
Lambda特点总结
- 参数列表中的参数类型可以直接都忽略掉不写。(注意是参数类型,不是参数。因为因为JVM编译器通过上下文推断出数据类型)
- 如果只有一个参数,圆括号也可以省略
- 方法体如果只有一语句,可以省略掉大括号
- 如果仅有一条语句,并且他是return语句的话,那么可以直接省略掉return关键字
示例
语法一:无参数,且无返回值类型
public void test() {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello Lambda!");
}
};
runnable.run();
}
/**
* () -> System.out.println("Hello Lambda!");
*/public void test() {
// "->" 左边只有一个小括号,表示无参数,右边是Lambda体(相当于实现了匿名内部类里面的方法了,即一个可用的接口实现类了)
Runnable runnable = ()->System.out.println("Hello Lambda!");
runnable.run();
}
语法二:一个参数,且无返回值类型
/**
* (x) -> System.out.println(x)
*/
public void test() {
//这个e就代表所实现的接口的方法的参数
Consumer<String> consumer = (e)->System.out.println("Hello"+e);
consumer.accept("Lambda");
}
/**
* x -> System.out.println(x)
* 一个参数的话“()”可以省略
*/
public void test() {
//这个e就代表所实现的接口的方法的参数
Consumer<String> consumer = e->System.out.println("Hello"+e);
consumer.accept("Lamdba");
}
语法三:两个以上的参数,且有返回值,且 Lambda 体中有多条语句
public void test4() {
//Lambda 体中有多条语句,要用大括号括起来
Comparator<Integer> com = (x, y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
int compare = com.compare(, );
System.out.println(compare);
}
Lambda表达式(JDK8)的更多相关文章
- jdk8 Lambda表达式与匿名内部类比较
Labmda表达式与匿名内部类 前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖, ...
- JDK8 的 Lambda 表达式原理
JDK8 使用一行 Lambda 表达式可以代替先前用匿名类五六行代码所做的事情,那么它是怎么实现的呢?从所周知,匿名类会在编译的时候生成与宿主类带上 $1, $2 的类文件,如写在 TestLamb ...
- jdk8的新特性 Lambda表达式
很多同学一开始接触Java8可能对Java8 Lambda表达式有点陌生. //这是一个普通的集合 List<Employee> list = em.selectEmployeeByLog ...
- JDK8的新特性——Lambda表达式
JDK8已经发布快4年的时间了,现在来谈它的新特性显得略微的有点“不合时宜”.尽管JDK8已不再“新”,但它的重要特性之一——Lambda表达式依然是不被大部分开发者所熟练运用,甚至不被开发者所熟知. ...
- jdk8新特性-亮瞎眼的lambda表达式
jdk8之前,尤其是在写GUI程序的事件监听的时候,各种的匿名内部类,大把大把拖沓的代码,程序毫无美感可言!既然Java中一切皆为对象,那么,就类似于某些动态语言一样,函数也可以当成是对象啊!代码块也 ...
- JDK8 新特性 Lambda表达式
1.java8中Lambda表达式基础语法: (x,y) -> {} 左侧是一个小括号,里面是要实现的抽象方法的参数,有几个参数就写几个参数名,无参可写空括号,无需声明参数类型: 中间是一个jd ...
- JDK8新特性之Lambda表达式
Lambda表达式主要是替换了原有匿名内部类的写法,也就是简化了匿名内部类的写法.lambda语法结构: (参数1,参数2...)->{重写方法的内容,不定义方法名} 先看一个使用匿名内部类定义 ...
- (二)jdk8学习心得之Lambda表达式
二.Lambda表达式 1. 格式 (参数1,参数2,…,参数n)->{方法体} 注意: (参数1,参数2,...,参数n)要与方法接口中的参数一致,但是名字可以不一样. 此外,方法类型接口,有 ...
- JDK8新特性02 Lambda表达式02_Lambda语法规则
//函数式接口:只有一个抽象方法的接口称为函数式接口. 可以使用注解 @FunctionalInterface 修饰 @FunctionalInterface public interface MyF ...
- JDK8新特性01 Lambda表达式01_设计的由来
1.java bean public class Employee { private int id; private String name; private int age; private do ...
随机推荐
- zabbix数据库占用磁盘空间较大的处理方法
du -h /* |sort -nr 使用此命令一步步排查发现/var/lib/mysql/zabbix/这个目录占用磁盘空间较大 发现history_log.ibd这个文件最大,达到了38G,此文 ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)求解迷宫问题
用下面这个简单的迷宫图作为例子: OXXXXXXX OOOOOXXX XOXXOOOX XOXXOXXO XOXXXXXX XOXXOOOX XOOOOXOO XXXXXXXO O为通路,X为障碍物. ...
- iTOP4412开发板-使用buildroot搭建最简单的linux
本文档介绍的是使用buildroot搭建最简单的linux文件系统,Buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfi ...
- 吴裕雄--天生自然C语言开发:强制类型转换
#include <stdio.h> int main() { , count = ; double mean; mean = (double) sum / count; printf(& ...
- hdu 2586 How far away ?(LCA模板)(倍增法)
在dfs的过程中维护三个数组: deep[i],表示i点在树中的深度: grand[x][i],表示x的第2^i个祖先的节点编号: dis[x][i],表示x到它2^i祖 #include<io ...
- 四剑客(sed)
一. sed sed简介: 用Linux环境中的编辑器程序来编辑文本文件.这些编辑器可以让你用简单命令或鼠标单击来轻松地处理文本文件中的文本.但有时候,你会发现需要自动处理文本文件,可你又不想动用全副 ...
- HDU-1251-统计难题(Trie树)(BST)(AVL)
字典树解法(Trie树) Accepted 1251 156MS 45400K 949 B C++ #include"iostream" #include"cstdlib ...
- CocoaPods 安装和使用 - darcy_tang 的博客
最近换了新机器,重新搭建了开发环境,其中当然包括 CocoaPods. 装完顺便更新下 CocoaPods 安装文档. 正文 安装 CocoaPods 是用 ruby 实现的,要想使用它首先需要有 r ...
- LeetCode Day 13
LeetCode0026 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空 ...
- Qt QImag图像保存、格式转换
图像保存bool QImage::save(const QString &fileName, const char *format = Q_NULLPTR, int quality = -1) ...