a、匿名内部类的定义格式:

  接口名称 对象名 = new 接口名称(){
//覆盖重写所有抽象方法
};

一、

  /**
* lambda匿名函数的使用
* Lambda省去面向对象的条条框框,格式由3个部分组成:
* 1:一些参数
* 2:一个箭头
* 3:一段代码
*
* Lambda表达式的标准格式为:
* (参数类型 参数名称) ‐> { 代码语句 }
*
* 格式说明:
* A:接口中抽象方法的参数列表,无参数则留空;多个参数则用逗号分隔
* B:-> 传递的意思,把参数传给方式体
* C:重写接口的抽象方法的方法体
*/ public class LambdaTest1 {
public static void main(String[] args) {
/*
//三个线程对应三个任务
for (int i = 0; i <=2; i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}).start();
}
*/
//使用lambda表达式,实现多线程
new Thread(()->{
System.out.println(Thread.currentThread().getName());
}).start();
}
}

二、

public class LambdaTest2 {
public static void main(String[] args) {
/**
* 需求:     
* 使用数组存储多个Person对象     
* 对数组中的Person对象使用Arrays的sort方法通过年龄进行升序排序
*/
Persion[] arr={
new Persion("古力娜扎",19),
new Persion("迪丽热巴",18),
new Persion("马尔扎哈",20),
};
/* 匿名内部类
Comparator<Persion> com = new Comparator<Persion>() {
@Override
public int compare(Persion o1, Persion o2) {
return o1.getAge() - o2.getAge();
}
}; // 第二个参数为排序规则,即Comparator接口实例
Arrays.sort(arr,com);
*/ //lambda表达式的实现
Arrays.sort(arr,(Persion o1, Persion o2)->{
return o1.getAge() - o2.getAge();
}); for (Persion persion : arr) {
System.out.println(persion);
}
}
}

三、

//自定义接口
public interface Calculator {
int calc(int a, int b);
} public class LambdaTest3 {
public static void main(String[] args) {
//匿名类
/*
invokeCalc(10, 20, new Calculator() {
@Override
public int calc(int a, int b) {
return a + b;
}
});
*/ //lambda
invokeCalc(10,20,(int a,int b)->{
return a + b;
});
} public static void invokeCalc(int a, int b, Calculator calculator){
int result = calculator.calc(a, b);
System.out.println("结果是:"+result);
}
}

四、lambda表达式简洁版的条件:

  1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。 无论是JDK内置的 Runnable 、
Comparator 接口还是自定义的接口,只有当接口中的 抽象方法存在且唯一 时,才可以使用Lambda。
2. 使用Lambda必须具有上下文推断。 也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。 实例:
//lambda
invokeCalc(10,20,( a, b)->
a + b
);

五、lembda的经典运用

  //正常实现方式
List<ProductInfo> productInfoList = productService.findUpAll(); List<Integer> categoryTypeList = new ArrayList<>() for(ProductInfo productInfo : productInfoList){ categoryTypeList.add(productInfo.getCategoryType() )
} //lambda表达式实现方式
List<Integer> categoryTypeList = productInfoList.stream().map(e ->e.getCategoryType()).collect(Collectors.toList());

六、匿名内部类:是内部类的简化写法

        使用匿名内部类的前提条件:匿名内部类必须【继承】一个父类或者【实现】一个父接口。

        使用场景:在创建对象时,对象只是用一次

        格式:
new 父类名或者接口名(){
// 方法重写
@Override
public void method() {
// 执行语句
}
}; //逗号不能缺 使用匿名内部类目的可以简化:1. 定义子类
2. 重写接口中的方法
3. 创建子类对象
4. 调用重写后的方法
以上步骤最终只是为了调用方法 例子:
1、
定义接口
public interface MyInterface {
void method();
} 测试1
public class DemoTest {
public static void main(String[] args) {
MyInterface my = new MyInterface() {
@Override
public void method() {
System.out.println("匿名内部类...");
}
};
//将My传入shouMy方法中
shouMy(my);
}
public static void shouMy(MyInterface my){
my.method();
}
} 测试2
public class DemoTest {
public static void main(String[] args) {
//将My传入shouMy方法中
shouMy(new MyInterface() {
@Override
public void method() {
System.out.println("匿名内部类...");
}
});
}
public static void shouMy(MyInterface my){
my.method();
}
}

匿名内部类、lambda匿名函数表达式的更多相关文章

  1. C++--- Lambda匿名函数表达式

    视频教程:https://www.bilibili.com/video/av66419552/ 格式: [capture](parameters)mutable->returm-type{};  ...

  2. xpinyin-函数返回多个值-lambda匿名函数-列表生成式-三元表达式

    import xpinyinp=xpinyin.Pinyin() #实例化print(p.get_pinyin('小白','')) 函数返回多个值:1.函数如果返回多个值的话,它会把这几个值放到一个元 ...

  3. lambda 匿名函数

    # 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 返回值为6 # lambda匿名函数 f = lambda a,b,c:a ...

  4. Python 进阶 之 lambda 匿名函数

    lambda 是个匿名函数,通常用于简单判断或者处理,例如判断一个数的奇偶性,过滤字符串,逻辑运算等等. lambda表达式: >>>lambda x:x*x >>> ...

  5. lambda匿名函数和他的小伙伴(处理大量数据的时候用到)

    lambda匿名函数 主要是为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n f = lambda n : n ** n 语法: 函数名 = ...

  6. python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件

    上节课总结 1.三元运算 name=“name1”if 条件 else “name2” 2.深浅拷贝 数字.字符串 深浅,都一样 2.其他 浅拷贝:只拷贝第一层 深拷贝:不拷贝最后一层 3.set集合 ...

  7. Python 之父为什么嫌弃 lambda 匿名函数?

    Python 支持 lambda 匿名函数,其扩展的 BNF 表示法是lambda_expr ::= "lambda" [parameter_list] ":" ...

  8. Java中的lambda匿名函数使用

    Java中的lambda匿名函数使用 lambda匿名函数的使用是为了满足某些情况下需要临时定义函数,或者事先定义,需要时才使用.在python里面,lambda表达式的表达方式为:lambda 参数 ...

  9. javascript之小积累-匿名函数表达式的最佳实践

    在写js的时候,还是经常会用的匿名函数表达式,比如 setTimeout(function() { console.log(110); }, 1000); 上面那个function()就是匿名函数表达 ...

  10. lambda匿名函数透析

    lambda匿名函数透析 目录 1       匿名函数的作用... 1 2       匿名函数的格式... 1 3       匿名函数实例代码... 3   1         匿名函数的作用 ...

随机推荐

  1. SpringSecurity详解

    认证+授权代码实现 Spring Security是 一种基于 Spring AOP 和 Servlet 过滤器的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和 ...

  2. RocketMQ实战—5.消息重复+乱序+延迟的处理

    大纲 1.根据RocketMQ原理分析为什么会重复发优惠券 2.引入幂等性机制来保证数据不会重复 3.如何用死信队列处理优惠券系统数据库宕机 4.基于RocketMQ的订单库同步为什么会消息乱序 5. ...

  3. Kali Linux 简介

    Kali Linux 简介 Kali Linux 是一个由 Offensive Security 公司开发.维护和资助的基于 Debian 的 Linux 发行版,专为高级渗透测试和安全审计而设计.它 ...

  4. Python介绍以及应用场景

    Python介绍以及应用场景 Python简介 ​ Python,作为一种解释型.面向对象的高级编程语言,自1989年圣诞节期间由荷兰计算机科学家Guido van Rossum创造以来,已经取得了举 ...

  5. DeepSeek 不再卡顿,从此告别服务器繁忙,请稍后再试(建议收藏!)

    大家好,我是六哥. 由于DeepSeek真的太火了,也许你也跟我一样,常会遇到这样的情况: 真的让人抓狂,10条回复里常常有9条是"服务器blabla,请稍后重试",看到这话,就问 ...

  6. linux的使用(2)

    1,覆盖 > cat 文件名a>文件名b:将文档a覆盖文档b 2,追加 >> cat 文档名a>>文档名b:将文档a追加到文档b后 追加错误 上图所示:尽量使用字母 ...

  7. Linux - 批量清除失效软连接

    红底白字,并且一闪一闪的都是失效的软连接,需要批量清除它们... 1.打印所有失效软连接 find ./* -type l -exec test ! -e {} \; -exec echo {} \; ...

  8. mysql CONFLICT 冲突

    1.IGNORE 当使用INSERT语句向表中添加一些行数据并且在处理期间发生错误时,INSERT语句将被中止,并返回错误消息.因此,可能不会向表中没有插入任何行.但是,如果使用INSERT INGO ...

  9. 编写你的第一个 Django 应用程序,第4部分

    本教程从教程 3 停止的地方开始.我们是 继续民意调查应用程序,并将专注于表单处理和 减少我们的代码. 一.编写最小表单 让我们更新上一个教程的投票详细信息模板("polls/detail. ...

  10. 【前端开发】记一次Echart 内存泄露问题的排查

    最近发现一个web项目总是莫名其妙的内存增长,然后进行定位后来发现问题大概率出在Eharts上. 于是乎就开始搜索关于echarts内存增长的一些例子,但是都没有结果. 其中翻博客时发现甚至有人换成一 ...