菜鸟理解Lamdba表达式
简单的说就是Java 1.8后给出个简化代码的方式,
Java面向对象过分强调必须通过对象的形式来完成任务,而函数思想则尽量忽略面向对象的复杂语法,强调做什么,而不是以什么形式做。
举个栗子!
首先创建一个接口
package com.mju.band3;
public interface Cook {
public void MakeFood( );
}
接着我们用匿名内部类,Lambda表达式和简化Lambda来玩玩看
//匿名内部类,invokeCook参数是Cook,使用匿名内部类new一个Cook你懂我意思吧?
package com.mju.band3;
public class CookLambda {
public static void main(String[] args) {
invokeCook(new Cook() {
@Override
public void MakeFood() {
System.out.println("吃饭饭");
}
});
//Lambda表达式:括号代表的是Cook的(),有参数那就往里面传参,下面我会有个传参数的例子->代表前面的参数传递给后面的代码,后面的输出语句就是业务逻辑代码
>
invokeCook(()->{
System.out.println("我也吃饭饭");
});
//简化Lambda
1:(参数列表)小括号内的参数类型可以省略
2:(参数列表)括号中的参数如果只有一个,那么参数和类型都可以省略
3:(一些代码)如果{}中代码只有一行,无论有无返回值,都可以省略{},return,分号,不过要注意要省略的话这三个得都省略,不能只省略其中几个,
invokeCook(()-> System.out.println("我也他妈要吃饭饭"));
}
public static void invokeCook(Cook cook){
cook.MakeFood();
}
}
==========================================================================================================================================
再来个有参数例子
package com.mju.band3;
public interface Culator {
public int carulater(Integer a,Integer b);
}
package com.mju.band3;
public class Cualter {
public static void main(String[] args) {
// invokeCul(10, 20, new Culator() {
// @Override
// public int carulater(Integer a, Integer b) {
// return a+b;
// }
// });
invokeCul(10,20,(a,b)->{
return a+b;
});
invokeCul(10,20,(a,b)->a+b);
}
public static void invokeCul(int a,int b,Culator c){
int sum =c.carulater(a,b);
System.out.println(sum);
}
}
最后要注意一下,使用Lambda必须具有接口,且接口中有且只有一个抽象方法
使用Lambda必须具有上下文推断,也就是方法的参数或局部变量必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例
菜鸟理解Lamdba表达式的更多相关文章
- Lamdba表达式的代码使用讲解
public class Lambda{ public static void main(String[] args) { repeat(10, (i)->System.out.print(&q ...
- Java8 Lamdba表达式 001
在一个已经存在的编程语言里非常少有对现有的生态系统起重大影响的新特性.Lambda表达式对于Java语言就是这样的意义的存在.简单来说,Lambda表达式提供了便利的方式去创建一个匿名的功能.提供了一 ...
- C#3.0 Lamdba表达式与表达式树
Lamdba表达式与表达式树 Lamdba表达式 C#2.0中的匿名方法使得创建委托变得简单起来,甚至想不到还有什么方式可以更加的简化,而C#3.0中的lamdba则给了我们答案. lamdba的行为 ...
- C#高级编程9-第8章 委托、lamdba表达式和事件
委托.lamdba表达式和事件 1.引用方法 函数指针是一个指向内存位置的指针,不是类型安全的.无法判断实际指向.参数和返回类型也无从知晓..NET委托是类型安全的.定义了返回类型和参数类型,不仅包含 ...
- Asp.net Core C#进行筛选、过滤、使用PredicateBuilder进行动态拼接lamdba表达式树并用作条件精准查询,模糊查询
在asp.net core.asp.net 中做where条件过滤筛选的时候写的长而繁琐不利于维护,用PredicateBuilder进行筛选.过滤.LInq配合Ef.core进行动态拼接lamdba ...
- java8中对lamdba表达式方法参数传递时,方法重载之后的类型推断
java8中可以向方法传递一个lamdba表达式,今天看书关于类型推断碰到一个问题: 这个问题我实际操作了一下:得出结论 如果是只有一个方法的情况下,方法参数使用lamdba表达式的时候是不需要写类型 ...
- Java8 Lamdba表达式 002
本篇将讲述lamdba表达式的排序,本例包括一个Player对象的集合[稍后定义],通过每一个player的分数高低对列表的player进行排序.类定义001例如以下 public class Sor ...
- Java8 新特性 Lamdba表达式
Lamdba 表达式为什么出现 Java8是自java延生以来最大的改变,他允许java中的方法和函数成为一等公民(可以在方法间传递),所以就应运而出现了Lamdba表达式,他可以将表达式传递给另 ...
- 第8章 委托、Lamdba表达式和事件
本章内容: 委托 Lambda表达式 事件 8.1.3 简单的委托示例 首先定义一个类MathOperations,它有两个静态方法,对double类型的值执行两个操作. public cl ...
随机推荐
- iterm2常用快捷键
标签 新建标签: command + t 关闭标签: command + w 切换标签: command + 数字 command + 左右方向键 切换全屏: command + enter 查找: ...
- PHP7 源码整体框架
一.PHP7语言执行原理 常用的高级语言有很多种,根据运行的方式不同,大体分为两种:编译型语言和解释型语言. 编译是指在应用源程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编 ...
- 利用uboot下载引导Kernel(TFTP)以及挂载网络Rootfs(NFS)
背景: 在嵌入式开发中,经常需要对系统的各个部分进行修改.倘若每次修改都烧写到板子中,一来浪费时间,其次影响存储介质寿命. 所以,需要一些手段来避免此类问题. 概览: 编译uboot 将uboot写入 ...
- 将OB86的故障信息保存在DB86中去
出现DP站故障的时候,CPU会自动调用OB86 ,OB86 的20B 局部变量里面有丰富的故障信息,生成数据块DB86 在DB86 中生成5个双字元素的数组ARAY 在OB86中调用 "BL ...
- MyBatis源码部分简单地解析
. 一.解析xml: > org.apache.ibatis.session.SqlSessionFactoryBuilder.build(java.io.InputStream, java.l ...
- springboot的maven多模块项目架构微服务搭建——依赖方式的多模块演化为微服务项目
在上一篇依赖方式多模块的基础上对项目进行改造.主要改造user-service项目,service要配置mapper.mybatis及数据库相关的东西,后面的接口消费方user就不再需要了 注意:以下 ...
- redis cluster 添加/删除节点操作
RedisCluster 添加/删除节点 添加节点新配置两个测试节点8008和9009 [root@--- ~]# /usr/local/redis-/bin/redis-server /u02/re ...
- MinGW 安装与简单实例
MinGW的下载 链接: https://pan.baidu.com/s/1JiZoyFHUWoeaxCQcUXCKgg 密码: myh3 MinGW的安装 基本上都是按提示的点击下一步操作 接下来修 ...
- qq群的表设计探究
2018年3月21日 课题组管理就如qq的群是一样的,课题组有课题组组长:qq群有群主:课题组有组员:qq群有群人员 对于一个课题组来说,组长可以对课题组进行修改,组员只能看得见,但是不能修改.所以 ...
- python数据分析基础
---恢复内容开始--- Python数据分析基础(1) //2019.07.09python数据分析基础总结1.python数据分析主要使用IDE是Pycharm和Anaconda,最为常用和方便的 ...