Lambda表达式

  • Lambda表达式概述
  • Lambda表达式语法
  • Lambda表达式案例
  • Lambda表达式总结

Lambda表达式概述

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
lamda表达式又称为函数式编程
如y=kx+1;f(x)=kx+1;这是数学中的函数,给定一个x,就能得到一个y的值
Lambda表达式又是面向接口的,面向接口编程。要想面向函数编程,按照面向接口的原则,就要定义一种函数式接口

Lambda表达式语法

使用匿名内部类实现一个接口

(parameters) -> expression
或
(parameters) ->{ statements; }

Lambda表达式案例

interface Fooi{public void sayHello();
}
public class LambdaTest {public static void main(String[] args) {//接口不能new,使用匿名内部类Fooi foo = new Fooi(){@Overridepublic void sayHello() {// TODO Auto-generated method stub       System.out.println("hello 2004");}    };foo.sayHello();}
}


这里程序本来只有一行,但是写了这么多。降低了程序开发的效率。
如何能够优化呢?
Lambda表达式就是解决了匿名内部类代码冗余的现象
我们可以看到,这个接口只有一个方法,当我们想要实现这个接口时,实现的方法也只有1个。即不用指定就知道是哪一个方法了。
Lambda表达式口诀:拷贝小括号,写死右箭头,落地大括号

interface Fooi{public void sayHello();
}
public class LambdaTest {public static void main(String[] args) {Fooi foo=() -> {System.out.println("hello 1205");};foo.sayHello();}
}


后面代码只有两行。明显的提高了开发的效率
如果现在有多个方法呢,还能使用吗?

interface Fooi{public void sayHello();public int add(int x,int y);
}
public class LambdaTest {public static void main(String[] args) {Fooi foo=()->{System.out.println("hello 1205");};foo.sayHello();}
}

此时程序报错:


可见,函数式接口中只能实现一个方法才能使用Lambda表达式
如果有参数有返回值可使用吗?

interface Fooi{public int add(int x,int y);
}
public class LambdaTest {public static void main(String[] args) {Fooi foo=(int x,int y)->{return x+y;};System.out.println(foo.add(3,5));}
}


由此可见,方法有参数有返回值也可以使用Lambda表达式

如何保证接口是函数式接口呢?
使用@FunctionalInterface注解

给接口加上两个方法,就会报错。如图所示:

@FunctionalInterface;
interface Fooi{public int add(int x,int y);public void sale();
}


此时会报错。
如果一个接口里面有且仅有一个未实现的方法,但没有加上这个注解,java里面会隐式的为这个接口加上这个注解
如果一个接口里面有两个方法,并且定义了FunctionalInterface注解,就会报异常

Lambda表达式总结

Lambda表达式口诀:拷贝小括号,写死右箭头,落地大括号
@FunctionalInterface注解的使用

Java基础-Lambda表达式相关推荐

  1. Java基础-Lambda表达式基础练习

    Lambda表达式基础练习 Lambda表达式得格式:(形式参数)->{代码块} Lambda表达式使用前提: 有一个接口 接口中有且仅有一个抽象方法 练习1:定义一个接口(Eatable),里 ...

  2. Java 基础 —— Lambda 表达式

    概述 阅读项目代码时,尤其是阅读一些源码时,经常会遇到 Lambda 表达式.对此之前看过相关文章,但是停留在模模糊糊的印象上.今天趁着有时间,通过一些 demo 示例,梳理一下它的用法,以备后期遗忘 ...

  3. [Java基础]Lambda表达式和匿名内部类的区别

  4. [Java基础]Lambda表达式的注意事项

  5. [Java基础]Lambda表达式的省略模式

  6. [Java基础]Lambda表达式的格式与使用前提

  7. [Java基础]Lambda表达式练习

    代码如下: package LambdaPracticePack;public interface Eatable {void eat(); } package LambdaPracticePack; ...

  8. 「 Java基础-Lambda 」试试Lambda表达式?通俗易懂得嘞

    前言 Lambda表达式是JDK8的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构. JDK也提供了大量的内置函数式接口供我 ...

  9. Java中Lambda表达式使用及详解

    Java中Lambda表达式使用及详解 前言 一.Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中.使 ...

最新文章

  1. I00031 Look-and-say sequence
  2. 【剑指offer-Java版】40数组中只出现一次的数字
  3. php记录用户搜索历史记录,PHPCookei记录用户历史浏览信息的代码
  4. [Swift]LeetCode388. 文件的最长绝对路径 | Longest Absolute File Path
  5. 1.PostgreSQL的学习
  6. 微服务容器化最短路径,微服务 on Serverless 最佳实践
  7. 【Android AAR】1 分钟不用改任何代码在 Eclipse 中使用 AAR
  8. [BizTalk]在高可用性环境下配置BizTalk的一些常见问题
  9. c++for循环求最大公约数_C/C++编程笔记:C语言 for 循环精讲!实例讲解带你吃透...
  10. mysql保留字-关键字表
  11. 浅谈axios.interceptors拦截器
  12. redux react-redux入门篇
  13. C语言实例第8期:模拟银行账户登陆
  14. idea创建类时自动添加注释
  15. 公众号常用的排版软件有哪些?
  16. ACM Plan UVa - 10102 The path in the colored field
  17. java 考勤_java,添加一个类,显示考勤信息的。
  18. mysql是一个大型数据库_MySQL是一个大型关系型数据库管理系统(RDBMS)。
  19. 惊!搜狐邮箱乱添附件!!!!
  20. nas 软件 性能测试,铁威马NAS数据传输性能测试

热门文章

  1. 打破传统内容生产 易车玩转综艺原创
  2. 终于等到了!新一代AirPods正式发布:新增无线充电盒
  3. QQ春节游园会被拆开11.2亿个福袋 近一半都被00后给拆了
  4. 拒绝PPT手机?魅族首款真无孔手机将开启众筹
  5. Python机器学习:贝叶斯文本分类器
  6. python php 序列化,序列化和反序列化的详细介绍
  7. 关于计算机犯罪的英语作文,关于信息安全的英语作文范文
  8. python ax.imshow_python – Matplotlib imshow / matshow在情节上显...
  9. python不同版本安装;第三方库的安装
  10. github java开源项目经验_Java 开源项目 GitHub 趋势周报 20201230