Java Lambda表达式教程与示例
Lambda表达式是Java 8中引入的一个新特性。一个lambda表达式是一个匿名函数,而且这个函数没有名称且不属于任何类。lambda表达式的概念最初是在LISP编程语言中引入的。
Java Lambda表达式语法
要创建lambda表达式,我们需要在lambda运算符(->)的左侧指定输入参数(如果有的话),并将表达式或语句块放在lambda运算符的右侧。例如,lambda表达式(x,y)->x + y 表示lambda表达式采用两个参数x和y并返回两个参数的总和。
1
2
|
//Syntax of lambda expression (parameter_list) -> {function_body} |
Lambda表达式 vs Java中的方法
Java中的方法(或函数)主要有以下部分:
1、名称
2、参数列表
3、函数主体
4、返回类型
Java中的lambda表达式主要有以下部分:
Lambda表达式仅具有主体和参数列表。
1、无名称 - 函数是匿名的所以我们不关心名称
2、参数列表
3、主体 - 这是函数的主要部分
4、无返回类型 - java 8编译器能够通过检查代码来推断返回类型,所以使用者无需明确指定
在Java中使用Lambda表达式的位置
要使用lambda表达式,您需要创建自己的功能接口或使用Java提供的预定义功能接口。功能性接口(或单一抽象方法接口)是指带有单一抽象方法的接口,例如:可运行接口、可调用接口、动作监听者等等。
使用函数接口:
Java 8之前:我们创建匿名内部类。
Java 8之后:您可以使用lambda表达式代替匿名内部类。
Java Lambda表达式实例
不使用Lambda表达式:在Java 8之前,我们使用匿名内部类来实现功能接口的唯一抽象方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.awt.*; import java.awt.event.*; public class ButtonListenerOldWay { public static void main(String[] args) { Frame frame= new Frame( "ActionListener Before Java8" ); Button b= new Button( "Click Here" ); b.setBounds( 50 , 100 , 80 , 50 ); b.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println( "Hello World!" ); } }); frame.add(b); frame.setSize( 200 , 200 ); frame.setLayout( null ); frame.setVisible( true ); } } |
Lambda使用表达式方式:我们可以像这样创建一个lambda表达式,而不是创建匿名内部类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import java.awt.*; public class ButtonListenerNewWay { public static void main(String[] args) { Frame frame= new Frame( "ActionListener java8" ); Button b= new Button( "Click Here" ); b.setBounds( 50 , 100 , 80 , 50 ); b.addActionListener(e -> System.out.println( "Hello World!" )); frame.add(b); frame.setSize( 200 , 200 ); frame.setLayout( null ); frame.setVisible( true ); } } |
注意:
1、正如您所看到的,我们使用lambda表达式只需较少的代码。
2、向后兼容性:您可以将lambda表达式与旧代码一起使用,Lambdas是向后兼容的,因此当您将项目迁移到Java 8时,可以在现有API中使用它们。
让我们看几个Lambda表达式的例子。
示例1:没有参数的Java Lambda表达式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@FunctionalInterface interface MyFunctionalInterface { //A method with no parameter public String sayHello(); } public class Example { public static void main(String args[]) { // lambda expression MyFunctionalInterface msg = () -> { return "Hello" ; }; System.out.println(msg.sayHello()); } } |
输出:
1
|
Hello |
示例2:具有单个参数的Java Lambda表达式
1
2
3
4
5
6
7
8
9
10
11
12
|
@FunctionalInterface interface MyFunctionalInterface { //A method with single parameter public int incrementByFive( int a); } public class Example { public static void main(String args[]) { // lambda expression with single parameter num MyFunctionalInterface f = (num) -> num+ 5 ; System.out.println(f.incrementByFive( 22 )); } } |
输出:
1
|
|
示例3:具有多个参数的Java Lambda表达式
1
2
3
4
5
6
7
8
9
10
|
interface StringConcat { public String sconcat(String a, String b); } public class Example { public static void main(String args[]) { // lambda expression with multiple arguments StringConcat s = (str1, str2) -> str1 + str2; System.out.println( "Result: " +s.sconcat( "Hello " , "World" )); } } |
输出:
1
|
Result:Hello World |
示例4:使用foreach循环迭代集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import java.util.*; public class Example{ public static void main(String[] args) { List<String> list= new ArrayList<String>(); list.add( "Rick" ); list.add( "Negan" ); list.add( "Daryl" ); list.add( "Glenn" ); list.add( "Carl" ); list.forEach( // lambda expression (names)->System.out.println(names) ); } } |
我们可以使用lambda表达式迭代Maps和其他集合类,请参阅本指南:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=36&cid=
Java Lambda表达式教程与示例的更多相关文章
- Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例
本文由 ImportNew 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的ja ...
- Java 8 Lambda表达式10个示例【存】
PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...
- Java Lambda表达式入门[转]
原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...
- Java8一:Lambda表达式教程
1. 什么是λ表达式 λ表达式本质上是一个匿名方法.让我们来看下面这个例子: public int add(int x, int y) { return x + y; } 转成 ...
- java8 快速入门 lambda表达式 Java8 lambda表达式10个示例
本文由 ImportNew - lemeilleur 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发 ...
- Java8 lambda表达式10个示例
Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...
- Lambda表达式常用代码示例
Lambda表达式常用代码示例 2017-10-24 目录 1 Lambda表达式是什么2 Lambda表达式语法3 函数式接口是什么 3.1 常用函数式接口4 Lambdas和Streams结合使 ...
- Java8 lambda表达式10个示例<转>
例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...
- Java Lambda表达式初探
Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...
随机推荐
- Swift协议
「协议」(protocol)声明一系列方法.属性.下标等用来约束其「遵循者」,进而保证「遵循者」能够完成限定的工作.「协议」本身不实现任何功能,它仅仅描述了「遵循者」的实现.「协议」能被类.结构体.枚 ...
- HDU5692 Snacks
HDU5692 Snacks Problem Description 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的 ...
- Linux命令汇总(二)
1.登录用户设置 新创建了一个用户,用useradd指令,但是发现通过终端无法登陆: echo password | passwd --stdin username 或者 passwd --st ...
- Vijos:P1117数的划分
描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1;问有多少种不同的分法. 格式 输入 ...
- ORACLE常用数据库字段类型
ORACLE常用数据库字段类型 常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes VARCHAR2 可变长度 ...
- submatrix
given a 2-d matrix with 0 or 1 values largest square of all 1's dynamic programming, dp[i][j] = 1 + ...
- 封装类似thinkphp连贯操作数据库的Db类(简单版)。
<?php header("Content-Type:text/html;charset=utf-8"); /** *php操作mysql的工具类 */ class Db{ ...
- koa-router 路由参数与前端路由的结合
koa-router 定制路由时支持通过冒号形式在 url 中指定参数,该参数会挂载到 context 上然后可通过 context.params.paramName 方便地获取. 考察下面的示例: ...
- JSP 标准标签库(JSTL)(菜鸟教程)
菜鸟教程 JSTL 1.1 与 JSTL 1.2 之间的区别?如何下载 JSTL 1.2? JSTL 1.2 中不要求 standard.jar 包. 您可以在 Maven 中央仓库中找到它们. ht ...
- gulp --watch直接退出,并没有监听
1.在es6(彩票项目)搭建环境时遇到gulp --watch 只运行一次就退出了不能监听: D:\nodejs\es6-base>gulp --watch [::] Failed to loa ...