上文中简单介绍了一下java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习。本文就从java8新特性中比较重要的Lambda表达式开始学学习。

一、为什么要使用Lambda表达式

  Lambda是一个匿名函数,我们可以baLambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁,更灵活的代码。作为一种更紧凑得代码风格,使得java得语言表达能力得到提升。Lambda表达式需要函数式接口的支持,接口中只有一个抽象方法得接口叫做函数式接口。可以使用@FunctionalInterface修饰,可以检查是否是函数式接口。

二、Lambda表达式基础语法

  java8中新增了一个操作符,“->”箭头表达式,也叫Lambda操作符。Lambda表达式左侧为Lambda表达式得参数列表,右侧为操作步骤与逻辑,也叫做Lambda体。Lambda表达式有几种语法格式,下面就来一一学习。

  1. 无参数,无返回值(()-> 接口得功能)。

 /**
*
* 语法一:无参数,无返回值(()-> 执行的代码)
*/
@Test
public void test1() {
//java8实现Runnable方法
Runnable run = () -> System.out.println("Hello Lambda");
run.run(); //java8以前得写法
Runnable run1 = new Runnable() { @Override
public void run() {
System.out.println("Hello World");
}
};
run1.run();
}

  其中需要注意得是,在java1.7以前,在匿名内部类中使用同级别得得局部变量时,这个局部变量必须时final类型得,但是在java8以后,局部变量不用final修饰了,final可以省略,但是其类型还是默认为final类型的。

  2.一个参数,无返回值

     /**
* 语法二:一个参数,无返回值
*/
@Test
public void test2() {
Consumer<String> t = (x) -> System.out.println(x);
t.accept("Hello Lambda");
}

  注意,如果只有一个参数,小括号可以不写。

     /**
* 语法二:一个参数,无返回值
*/
@Test
public void test2() {
Consumer<String> t = x -> System.out.println(x);
t.accept("Hello Lambda");
}

  3. 多个参数,多条语句,有返回值。

     /**
* 语法三:多个参数,多条语句,有返回值。
*/
@Test
public void test3() {
Comparator<Integer> com = (x, y) -> {
System.out.println(x);
System.out.println(y);
return 0;
};
System.out.println(com.compare(1, 3));
}

  4.多个参数,一条语句,有返回值

     /**
* 语法四:多个参数,一条语句,有返回值
*/
@Test
public void test4() {
//只有一条语句与返回值时,大括号和return都可以省略
Comparator<Integer> com = (x, y) -> 0; System.out.println(com.compare(1, 3));
}

  注意:只有一条语句与返回值时,大括号和return都可以省略。

  5.Lambda表达式得参数列表可以不用写,因为JVM编译器可以通过上下文推断出类型,即“类型推断”

三、Lambda表达式需要“函数式接口”的支持

  函数式接口:接口中只有一个抽象方法时,那么这个接口叫做函数式接口。函数式接口可以使用@FunctionalInterface修饰,jvm会自动检查该接口是否为函数式接口。

 @FunctionalInterface
public interface myLambdaModle<T> { public int test(T t1, T t2); }

  需求:对两个数进行运算

     @Test
public void test5() {
int sum1 = myTest(3, 6, (x, y) -> x*y);
int sum2 = myTest(3, 6, (x, y) -> x-y);
int sum3 = myTest(3, 6, (x, y) -> x+y);
int sum4 = myTest(3, 6, (x, y) -> x/y);
} public int myTest(int o1, int o2, myLambdaModle<Integer> m) {
return m.test(o1, o2);
}

  这样,我们就可以使用一个接口就对数字进行运算操作,具体什么操作可以自己去定义。

  从本文可以看出,原来JDK1.7以前,如果定义一个抽象方法,一个方法,就只能实现一种运算,而现在,实现完全可以自己去定义代码简化了许多。后面随笔会继续学习java8的四大内置得核心函数式接口。

    

java8新特性——Lambda表达式的更多相关文章

  1. Java8新特性-Lambda表达式是什么?

    目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...

  2. 乐字节-Java8新特性-Lambda表达式

    上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...

  3. Java8新特性 - Lambda表达式 - 基本知识

    A lambda expression is an unnamed block of code (or an unnamed function) with a list of formal param ...

  4. java8新特性-lambda表达式和stream API的简单使用

    一.为什么使用lambda Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...

  5. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  6. Java8 新特性lambda表达式(一)初始

    本篇参考Richard Warburton的 java8 Lambdas :Functional Programming for the Masses 学习lambda表达式之前,需要知道什么是函数式 ...

  7. Java8新特性——Lambda 表达式

    Lambda 表达式 ​ ​ ​ ​ ​ ​ ​ ​ Lambda 表达式的实质属于函数式编程. ​ ​ ​ ​ ​ ​ ​ ​ 语法格式为:(parameters) -> expression ...

  8. Java8新特性-Lambda表达式

    1.  什么是Lambda表达式? Lambda表达式就是可以把函数作为参数传递,或者说把代码作为数据传递给函数. 2. Lambda表达式的语法格式 基本语法格式如下: 基本语法下多个变体的说明: ...

  9. Java8新特性——lambda表达式.(案例:词频统计)

    需求:读入一个文本文件,确定所有单词的使用频率并从高到低排序,打印出所有单词及其频率的排序列表 先用传统方法解: package cn._1.wordfrequency; import java.ut ...

随机推荐

  1. JavaScript数据类型和转换

    JavaScript数据类型 1.Boolean(布尔) 布尔:(值类型)var b1=true;//布尔类型 2.Number(数字) 数值:(值类型)var n1=3.1415926;//数值类型 ...

  2. Spring Boot中对log4j进行多环境不同日志级别的控制

    之前介绍了在<Spring boot中使用log4j记录日志>,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需 ...

  3. flex实例(阮一峰)

    Flex 布局教程:实例篇   作者: 阮一峰 日期: 2015年7月14日 上一篇文章介绍了Flex布局的语法,今天介绍常见布局的Flex写法. 你会看到,不管是什么布局,Flex往往都可以几行命令 ...

  4. Lithium中关键特性更新

    Lithium中关键特性更新 1. Lithium特性更新概述 Lithium相对于Helium更新特性共27项,其中原有特性提升或增强13项,新增特性14项,如下表所示 特性类型 相对于Helium ...

  5. 修改vs17中的cordova模板

    因为visual studio 2017创建的默认cordova-ios的版本自动编译带有swift语言的插件会出现异常,cordova-ios升级到4.3.1,并且配置build.json能解决问题 ...

  6. RestTemplate OR Spring Cloud Feign 上传文件

    SpringBoot,通过RestTemplate 或者 Spring Cloud Feign,上传文件(支持多文件上传),服务端接口是MultipartFile接收. 将文件的字节流,放入ByteA ...

  7. angular项目中使用jQWidgets

    Angular CLI with jQWidgets In this tutorial, we will show you how to use https://cli.angular.io/ alo ...

  8. Eloqument 学习

    参考地址:https://d.laravel-china.org/docs/5.5/eloquent#mass-assignment

  9. SilverLight高亮显示文本

    文笔不好,就长话短说,就是想实现这样的效果,比如在成都二环路南一段一号附一号凤舞九天网吧 ,搜索 二环路 九天网吧 然后结果中高亮显示. <local:TextBlockHighLight Te ...

  10. Linux软件管理器(如何使用软件管理器来管理软件)2---安装及管理Linux应用程序

    安装及管理Linux应用程序 Linux应用程序的组成1.普通的可执行程序文件,一般保存在/usr/bin目录中,普通用户即可执行.2.服务器程序.管理程序文件,一般保存在/usr/sbin目录中,需 ...