JAVA8新特性——Lamda表达式
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~
Lamda表达式,读作λ表达式,它实质属于函数式编程的概念,要理解函数式编程的产生目的,就要先理解匿名内部类。
先来看看传统的匿名内部类调用方式:
interface MyInterface{
    void lMethod();
}
public class Main {
    public static void test(MyInterface myInterface){
        myInterface.lMethod();
    }
    public static void main(String[] args) {
        test(new MyInterface() {
            @Override
            public void lMethod() {
                System.out.println("Hello World!");
            }
        });
    }
}
在主类中的这么几行代码,嵌套几层就为了输出一个Hello World!是不是很麻烦?但是由于java结构的完整性,我们还不得不那么做,现在JDK1.8来了。
再来看看使用Lamda表达式改写上面的代码:
interface MyInterface{
    void lMethod();
}
public class Main {
    public static void test(MyInterface myInterface){
        myInterface.lMethod();
    }
    public static void main(String[] args) {
        test(()->System.out.println("Hello World!"));
    }
}
这就是Lamda表达式语言,为了解决匿名内部类繁杂的操作而出现。
Lamda语法有三种形式:
- (参数) ->单行语句;
- (参数) ->{多行语句};
- (参数) ->表达式;
括号()可以大致理解为就是方法,里面是参数变量,在上面的例子中()->System.out.println("Hello World!") 前面的()代表void lMethod()方法,它没有入参,所以为空,->后面是一个单行语句;
如果->后面是多行语句,需要用{ }装起来,每条语句后需要有分号;
->后面也可以是一个表达式,如:a+b等。
(参数) ->单行语句:
interface MyInterface{
    void lMethod(String str);
}
public class Main {
    public static void test(MyInterface myInterface){
        myInterface.lMethod("Hello World!");//设置参数内容
    }
    public static void main(String[] args) {
        //首先在()中定义此表达式里面需要接收变量s,后面的单行语句中就可以使用该变量了
        test((s)->System.out.println(s));
    }
}
(参数) ->{多行语句}:
interface MyInterface{
    void lMethod(String str);
}
public class Main {
    public static void test(MyInterface myInterface){
        myInterface.lMethod("Hello World!");//设置参数内容
    }
    public static void main(String[] args) {
        //首先在()中定义此表达式里面需要接收变量s,后面的多行语句中就可以使用该变量了。注意:多行语句别少“;”号
        test((s)->{
            s=s+s;
            System.out.println(s);
        });
    }
}
(参数) ->表达式:
interface MyInterface{
    int lMethod(int a,int b);
}
public class Main {
    public static void test(MyInterface myInterface){
        int result=myInterface.lMethod(1,2);//设置参数内容,接收返回参数
        System.out.println(result);
    }
    public static void main(String[] args) {
        test((x,y)-> x*y );//调用方法
        //相当于
//        test((x,y)-> {return  x*y;});
    }
}
这样,Lamda表达式就看起来很简单了,有不有!
匿名内部类,我们比较常用的地方在哪儿?线程类Thread,以前我们可能这样写:
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("线程操作!");
    }
});
现在,使用Lamda表达式,简单写为:
new Thread(()->System.out.println("线程操作!"));
总结:利用Lamda表达式是为了避免匿名内部类定义过多无用的操作。
JAVA8新特性——Lamda表达式的更多相关文章
- java8新特性lamda表达式在集合中的使用
		1.利用stream().forEach()循环处理List; List<String> list = Lists.newArrayList();//新建一个List 用的google提供 ... 
- Java8新特性-Lambda表达式是什么?
		目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ... 
- 乐字节-Java8新特性-Lambda表达式
		上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ... 
- java8新特性——Lambda表达式
		上文中简单介绍了一下java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习.本文就从java8新特性中比较重要的Lambda表达式开 ... 
- Java8 新特性 Lamdba表达式
		Lamdba 表达式为什么出现 Java8是自java延生以来最大的改变,他允许java中的方法和函数成为一等公民(可以在方法间传递),所以就应运而出现了Lamdba表达式,他可以将表达式传递给另 ... 
- Java8 新特性_Lambda 表达式
		1. Java8新特性_简介 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 减少空指针异常的容器 Optional 2. ... 
- Java8新特性: lambda 表达式介绍
		一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ... 
- Java8新特性 - Lambda表达式 - 基本知识
		A lambda expression is an unnamed block of code (or an unnamed function) with a list of formal param ... 
- java8新特性-lambda表达式和stream API的简单使用
		一.为什么使用lambda Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ... 
随机推荐
- JavaIO详解
			很全面的内容:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html 
- 微信Android热补丁实践演进之路
			版权声明:本文由张绍文原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/81 来源:腾云阁 https://www.qclou ... 
- 微信小程序5.2.2版本,找不着resource下exml皮肤
			问题描述: egret engine 5.2.2 原来5.1.11好好的,一升级就跪了 新建一个项目,找不到皮肤... 已发到论坛问去了,现在只能手动复制皮肤到小游戏目录下... 解决方案: 卸载重新 ... 
- Egret类class和module写法区别
			普通类 Test.ts class Test { public name:string = "Test"; public run(){ console.log(this.name) ... 
- 【JavaScript算法】---希尔排序
			一.什么是希尔排序 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本. 思路: 希尔排序是把记录按下标的一定增量分组,对 ... 
- 【node】------websocket------【巷子】
			001.学习地址 https://github.com/websockets/ws 002.server.js //引入ws第三方模块 const WebSocket = require('ws'); ... 
- js常用的几个验证
			/// <summary> ///1. 使用正则表达式验证 参数 是否 为数值 /// </summary> /// <param name="trNumber ... 
- <sourceDirectory>src/main/java</sourceDirectory>  mvn 配置   包路径
			<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ... 
- AJAX.basic
			之前在项目中使用ajax都是通过jQuery的Ajax API来进行的,今天试了一下通过基本的JavaScript来进行ajax请求,将代码记录下来: jsp 页面 <%@ page pageE ... 
- apt-get install 和 pip install的区别
			pip install apt-get install 源是pyPI 源是ubuntu仓库 对于同一个包,pyPI可以提供更多的版本以供下载 pip install安装的python包,可以只安装在当 ... 
