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表达式教程与示例的更多相关文章

  1. Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例

    本文由 ImportNew 函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的ja ...

  2. Java 8 Lambda表达式10个示例【存】

    PS:不能完全参考文章的代码,请参考这个文件http://files.cnblogs.com/files/AIThink/Test01.zip 在Java 8之前,如果想将行为传入函数,仅有的选择就是 ...

  3. Java Lambda表达式入门[转]

    原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...

  4. Java8一:Lambda表达式教程

    1. 什么是λ表达式 λ表达式本质上是一个匿名方法.让我们来看下面这个例子: public int add(int x, int y) {         return x + y;     } 转成 ...

  5. java8 快速入门 lambda表达式 Java8 lambda表达式10个示例

    本文由 ImportNew - lemeilleur 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发 ...

  6. Java8 lambda表达式10个示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

  7. Lambda表达式常用代码示例

    Lambda表达式常用代码示例 2017-10-24 目录 1 Lambda表达式是什么2 Lambda表达式语法3 函数式接口是什么  3.1 常用函数式接口4 Lambdas和Streams结合使 ...

  8. Java8 lambda表达式10个示例<转>

    例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例.看一下Java 8之前的runna ...

  9. Java Lambda表达式初探

    Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...

随机推荐

  1. 【Lintcode】029.Interleaving String

    题目: Given three strings: s1, s2, s3, determine whether s3 is formed by the interleaving of s1 and s2 ...

  2. Btree算法的C语言实现

    btree.h //实现对order序(阶)的B-TREE结构基本操作的封装. //查找:search,插入:insert,删除:remove. //创建:create,销毁:destory,打印:p ...

  3. Mysql 5.7.18忘记密码

    5.7.18密码修改发生了变化,旧版的方法不再奏效. 1. ps -ef | grep mysqld,kill掉启动的mysql服务: 2. 创建/etc/my.cnf,添加: [mysqld] sk ...

  4. java注解总结(1)

    1.什么是注解 注解,主要提供一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据. 2.介绍 何为注解?--->元数据:描述数据自身的数据. 注解就是代码的元数据,他们包含了代码自身 ...

  5. RequestsLibrary库入门介绍

    Robot framework也可以进行接口测试,只需要导入相应的RequestsLibrary库即可. 一.准备工作: 首先需要安装好Robot framework基础环境,前面已做说明,本文就不做 ...

  6. ubuntu 14.04 部署Django项目

    一.购买服务器 推荐 vultr的服务器,还可以_ _ _,链接:传送门 操作系统建议选 ubuntu 14.04 64位 二.购买域名 链接:传送门 三.安装相关软件 # 创建一个叫mu的用户 ro ...

  7. sql中的begin....end

    Begin...End之间的是一个语句块,一般Begin...End用在  ( 相当于  {})whileif等语句中在T_SQL中,if/while后只能紧跟一条sql语句,如果有多条则应该用Beg ...

  8. 30个Python物联网小实验3:使用按钮开灯关灯

    使用按钮开灯关灯 接线图非常简单,LED接GPIO17号口,按钮接GPIO2号口,负极接GND地线. 代码也非常简单: from gpiozero import LED, Button from si ...

  9. Weekly Contest 112

    945. Minimum Increment to Make Array Unique Given an array of integers A, a move consists of choosin ...

  10. 类variant解剖

    说明:由于代码较为庞大,类variant源码请参考\eos\libraries\fc\src中的variant.hpp与variant.cpp文件^_^.     首先概览一下这个庞大的类,细数一下, ...