`

java 8 lambda表达式语法

 
阅读更多

lambda表达式可以这样定义:一段带有输入参数的可执行语句块。

 

Lambda语法详解

lambda表达式的一般语法:

 

(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
      statment1;
      statment2;
      //.............
      return statmentM;
}

 

lambda表达式的各种简化版:

1. 参数类型省略–绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。

 

(param1,param2, ..., paramN) -> {
      statment1;
      statment2;
      //.............
      return statmentM;
}

 

 

2. 当lambda表达式的参数个数只有一个,可以省略小括号。

 

param1 -> {
      statment1;
      statment2;
      //.............
      return statmentM;
}

 

3. 当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。

 

param1 -> statment

 

Lambda表达式眼中的外部世界

Lambda表达式可以访问给它传递的参数,也能自己内部定义变量。但是却从来没看到其访问它外部的变量。是不是lambda表达式不能访问其外部变量?我们可以这样想:lambda表达式其实是快速创建SAM接口的语法糖,原先的SAM接口都可以访问接口外部变量,lambda表达式肯定也是可以。

 

String[] array = {"a", "b", "c"};
for(Integer i : Lists.newArrayList(1,2,3)){
   Stream.of(array).map(item -> Strings.padEnd(item, i, '@')).forEach(System.out::println);
}

 

上面的这个例子中,map中的lambda表达式访问外部变量Integer i。并且可以访问外部变量是lambda表达式的一个重要特性,这样我们可以看出来lambda表达式的三个重要组成部分:

 

  • 输入参数
  • 可执行语句
  • 存放外部变量的空间

不过lambda表达式访问外部变量有一个非常重要的限制:变量不可变(只是引用不可变,而不是真正的不可变)。

String[] array = {"a", "b", "c"};
for(int i = 1; i<4; i++){
   Stream.of(array).map(item -> Strings.padEnd(item, i, '@')).forEach(System.out::println);
}

上面的代码,会报编译错误。因为变量i被lambda表达式引用,所以编译器会隐式的把其当成final来处理。细心的读者肯定会发现不对啊,以前java的匿名内部类在访问外部变量的时候,外部变量必须用final修饰。Bingo,在 java8对这个限制做了优化,可以不用显示使用final修饰,但是编译器隐式当成final来处理。

 

在lambda中,this不是指向lambda表达式产生的那个SAM对象,而是声明它的外部对象。

 

http://ifeve.com/lambda/

 

 

 

分享到:
评论

相关推荐

    java8 lambda表达式学习总结

    1. **类型推断**:Java 8 可以自动推断Lambda表达式的参数类型,因此在许多情况下,我们无需显式声明类型。 2. **捕获外部变量**:Lambda 表达式可以访问和修改其定义范围内的 final 或基本类型的局部变量。 3. **...

    Java 8 lambda表达式

    Java 8 的引入,尤其是Lambda表达式,对Java语言产生了深远的影响,它为Java开发者带来了更简洁、更灵活的编程方式。Lambda表达式是函数式编程的核心元素,它允许我们将函数作为方法参数传递,或者将代码块当作数据...

    Java8的lambda表达式

    Java8的Lambda表达式是Java语言的一次重大更新,它引入了函数式编程的概念,极大地简化了处理匿名函数的方式,特别是在处理集合和并发操作时。Lambda表达式使得代码更加简洁、易读,同时也提升了程序的执行效率。在...

    JAVA 8 Lambda表达式-Lambda Expressions.rar

    Java 8 的 Lambda 表达式是 Java 编程语言的重大革新,它引入了一种新的函数式编程概念,使得代码更加简洁、可读性更强。Lambda 表达式允许我们将函数作为一个方法参数,或者把函数作为方法返回值,极大地简化了处理...

    java8中的Lambda表达式

    Java 8 中的 Lambda 表达式是语言的重大更新,它引入了函数式编程的概念,使得代码更加简洁、易读。Lambda 表达式的主要目的是简化处理匿名内部类的情况,尤其是当这些类只需要一个方法时。 在传统的 Java 编程中,...

    JavaLambda表达式和匿名类.pdf

    Lambda表达式是Java 8中的一种语法糖,它允许开发者以更简洁的方式定义无状态、无副作用的函数。在描述中提到的代码示例中,对比了使用匿名类和Lambda表达式实现相同功能的方法。 首先,让我们看看匿名类的使用。在...

    Java lambda表达式和JVM字节码功能详解.pdf

    Java Lambda表达式是Java 8引入的一个重要特性,它极大地简化了函数式编程风格的实现。Lambda表达式允许我们将函数作为一个值传递,就像传递其他数据类型一样。这在处理集合、事件驱动编程以及多线程等场景下尤其...

    Java8的Lambda表达式

    Java 8引入了Lambda表达式,这是一种简洁的编写代码的方式,可以将代码块作为参数传递给方法,或者作为赋值给变量的对象。Lambda表达式为Java增加了函数式编程的能力,使代码更加简洁和灵活。在Java 8中,Lambda...

    java lambda 表达式(语言篇和类库篇)

    Java 8的`java.time`包引入了新的日期和时间API,其中很多操作也支持Lambda表达式,如`LocalDateTime.now().filter(date -&gt; date.getDayOfWeek() == DayOfWeek.SATURDAY)`。 5. **CompletableFuture**: `...

    Java的lambda表达式讲解代码(各种lambda表达式使用方式:无参、一个参数、多参数、简化形式...)

    1、Lambda表达式概述:了解Lambda表达式的定义、语法和变量捕获机制,以及为什么要在Java中引入Lambda表达式来支持函数式编程。 2、函数式接口与Lambda表达式:学习如何使用Lambda表达式与不同类型的函数式接口进行...

    2_Lambda表达式.zip

    Lambda表达式是Java编程语言中的一个关键特性,自Java 8开始引入,它极大地简化了函数式编程,尤其是在处理集合数据时。Lambda表达式的主要目的是为了创建匿名函数,即没有名字的函数,它可以被当作一个值传递给方法...

    Java 1.8 lambda表达式示例源码

    Lambda表达式是Java 8对函数式接口支持的核心组成部分,它允许我们将代码块视为一种值,可以作为参数传递,也可以作为方法返回。 首先,我们需要理解什么是函数式接口。函数式接口是指只有一个抽象方法的接口,这样...

    精通lambda表达式: java多核编程

    Lambda表达式是Java 8引入的关键特性之一,它极大地简化了函数式编程,使得Java开发者能够更有效地处理并发问题,从而更好地利用现代计算机的多核处理器资源。 Lambda表达式的核心概念在于它的简洁性和可传递性。它...

    【Java8】Lambda表达式 和 Stream API 详解笔记.zip

    【Java8】Lambda表达式 和 Stream API 是Java编程语言中的两个重要创新,它们极大地提升了代码的简洁性和可读性,特别是在处理集合数据时。这里我们将深入探讨这两个特性,并结合实际示例来理解它们的工作原理。 ...

    Java8新特性Lambda表达式的一些复杂用法总结

    Java 8引入了Lambda表达式,这是一种强大的新特性,它为Java编程语言带来了函数式编程的概念。Lambda表达式允许程序员创建匿名函数,即没有名称的函数,这些函数可以直接作为值传递给方法或存储在变量中。这使得代码...

    670.668.JAVA基础教程_动态代理与Java8新特性-Lambda表达式语法的使用(670).rar

    Lambda表达式是Java 8引入的一种简洁、函数式编程风格的语法糖。它使得可以将匿名函数作为方法参数传递,或者直接在方法内部定义。Lambda表达式的格式如下:`(parameters) -&gt; expression`。这里的"parameters"代表...

    Java8新特性之Lambda表达式和Optional类

    Lambda 表达式的语法糖是指 Java 8 中引入的 Lambda 表达式语法,允许开发者使用更简洁的方式编写 Lambda 表达式。Lambda 语法糖包括参数列表、箭头和函数体三个部分。 1.1.1 语法 Lambda 表达式的语法糖可以使用...

    委托、事件、Lambda表达式Demo

    Lambda表达式的基本语法是`参数列表 =&gt; 表达式`,其中参数列表可以为空,表达式则表示方法体。例如,上面的`MyDelegate`可以用Lambda表达式来创建实例: ```csharp MyDelegate lambdaDel = (x, y) =&gt; x + y; // ...

    jdk1.8 Lambda表达式

    Java 8 引入的 Lambda 表达式是 Java 编程语言的重大变革之一,它允许以更简洁的方式表示单方法接口的实现,极大地增强了 Java 语言的表达能力,尤其是结合了函数式接口、Stream API 和其他新特性后。接下来,我们将...

Global site tag (gtag.js) - Google Analytics