JAVA 8 新特性 Lamdba表达式(二)

一、Lamdba的语法

(参数类型1 参数1,参数类型2 参数2,…) -> { 方法体 };

Lambda表达式就是一个匿名函数,不关注方法名,只关注参数和方法体。

Lambda表达式组成三要素:括号(),箭头->,代码块{}

二、Lambda表达式和匿名内部类区别

1、匿名内部类可以是:接口、抽象类、或者具体类
     Lambda 表达式只能是:接口

2、匿名内部类:接口中可以多个或者一个方法
      Lambda 表达式:接口中的只能有一个方法

3、匿名内部类:编译之后会产生单独的 .class 文件
      Lambda 表达式:编译之后不会有单独的 .class 文件出现,对应的字节码会在运行的时 候动态生成

三、Lamdba的使用

1、多线程

Lambda表达式可以与Java中的函数式接口一起使用

private static  void t1() {//从匿名类到lambda转换Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("hello");}};runnable.run();//lambda表达式//左边是参数列表 ()//右边是执行的功能{}//  -> 操作符Runnable r1 = () -> System.out.println("hello");r1.run();
}

 

 2、排序

  Lambda表达式可以用于Java中的排序算法中

   private static void t2() {TreeSet<String> tree = new TreeSet<>(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {int result = o1.length()-o2.length();//比较字符串return  (result==0?o1.compareTo(o2):result);}});//添加数据比较,字符串长度小的排在前面tree.add("zhang");tree.add("win");tree.add("apple");tree.add("back");System.out.println(tree);TreeSet<String> tree2 =new TreeSet<>((String o1,String o2)->{int result = o1.length()-o2.length();//比较字符串return  (result==0?o1.compareTo(o2):result);}) ;//添加数据比较,字符串长度小的排在前面tree2.add("zhang");tree2.add("win");tree2.add("apple");tree2.add("back");System.out.println(tree2);}

 

3、集合

    注意:stream()和forEach())一起使用,使集合的处理更加简单、灵活和易于读写

  private static void t4() {List<String> strs = Arrays.asList("张三", "李四", "王五","王菲");for (String str:strs ) {System.out.println(str);}//lambda表达式strs.stream().forEach(name -> System.out.println("姓名:"+name));}

 

4、映射

Lambda表达式可以用于将一个集合中的元素映射到另一个集合中

   private static void t5() {List<String> names = Arrays.asList("John", "Mike", "Zhang","Peter");System.out.println(names);List<String> up = names.stream().map(String::toLowerCase).collect(Collectors.toList());System.out.println(up);}

5、过滤

Lambda表达式可以用于过滤集合中的元素

 private static void t6() {List<Integer> numbers = Arrays.asList(15, 72, 18, 52, 35, 66);System.out.println(numbers);List<Integer> result = numbers.stream().filter(n -> n % 3 == 0).collect(Collectors.toList());System.out.println(result);}

6、聚合

Lambda表达式可以用于聚合集合中的元素,例如,计算集合中的元素之和、平均值、最大值、最小值等。 

  private static void t7() {List<Integer> numbers = Arrays.asList(5, 2, 8, 12, 3, 6);System.out.println(numbers);// 从0开始累加数据int sum = numbers.stream().reduce(0,(a, b) -> a + b);System.out.println("总和: " + sum);double avg= numbers.stream().mapToInt(Integer::intValue).average().orElse(0.0);System.out.println("平均值:"+avg);int max= numbers.stream().mapToInt(Integer::intValue).max().orElse(0);System.out.println("最大值:"+max);}

7、函数式编程

 Lambda表达式可以使Java更加接近函数式编程,使代码更加简洁和易于理解。

interface MyInterfaces {int doing(int x, int y);
}private static void t8() {MyInterfaces my = (a, b) -> a * b;int result = my.doing(8, 16);System.out.println(result);}

8、并行计算

Lambda表达式可以与Java中的并行计算API(如Java 8中的Parallel Streams和Fork/Join框架)一起使用,使计算更加高效和快速。

// 返回一个顺序流
default Stream<R> stream();// 返回一个并行流
default Stream<E> parallelStream();
  private static void t9() {List<Integer> numbers = new ArrayList<>();//1000wfor (int i = 1; i <= 10000000; i++) {numbers.add(i);}
//        假设有一个大型的整数列表,需要计算其中所有元素的立方和。long sum = numbers.parallelStream().mapToLong(i -> i * i * i ).sum();System.out.println("计算所有元素的立方和: " + sum);

 

四、总结

  Lambda表达式是Java 8中最强大和灵活的新特性之一,它可以用于各种不同的编程任务,使代码更加简单、灵活和易于读写。

Lambda表达式的语法非常简洁,通常由一个参数列表、一个箭头符号和一个表达式主体组成。

Lambda表达式可以用于各种不同的编程任务,包括函数式编程、集合处理、数据库操作、Web开发、并行计算、GUI编程、测试等。使用Lambda表达式可以使代码更加简单、灵活和易于读写,并帮助开发人员减少代码的冗余和重复。 

总之,Lambda表达式是Java编程中不可或缺的一部分,它使Java变得更加现代化、灵活和强大,并且是Java 8中最重要的新特性之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES 8.x的多实例集群搭建与角色规划

ES 8 多实例集群搭建与角色规划 ES 8版本与之前版本存在较大改变&#xff0c;第一个区别就是启动时默认开启了安全模式&#xff0c;也就是即便是测试环境也需要用户名密码和https传输层安全证书。此外&#xff0c;集群节点的角色也与之前不同&#xff0c;除了新增角色外在配置…

Unity 获取鼠标滚轮信息的一些方法

Unity获取鼠标滚轮信息有以下一些方法&#xff1a; 1、使用Input.GetAxis(“Mouse ScrollWheel”)来获取鼠标滚轮的信息&#xff0c;如&#xff1a; //法一&#xff1a;float scrollWheelInput Input.GetAxis("Mouse ScrollWheel");if (scrollWheelInput > 0f){…

机器学习的概念、步骤、分类和实践

作为资深人工智能专家&#xff0c;对机器学习有着深入的研究和实践经验。以下是对机器学习概念、步骤、分类和实践的逐步分析&#xff1a; 一、机器学习概念 机器学习是人工智能的一个子集&#xff0c;它让计算机从数据中学习并改进其性能&#xff0c;而无需进行明确的编程。…

使用专属浏览器在国内直连GPT教程

Wildcard官方推特发文说他们最近推出了一款专门为访问OpenAI设计的浏览器。 根据官方消息&#xff0c;这是一款专门为访问OpenAI优选网络设计的浏览器&#xff0c;它通过为用户提供专用的家庭网络出口&#xff0c;确保了快速、稳定的连接。 用这个浏览器的最大好处就是直接用浏…

【测试开发学习历程】MySQL增删改操作 + 备份与还原 + 索引、视图、存储过程

前言&#xff1a; SQL内容的连载&#xff0c;到这里就是最后一期啦&#xff01; 如果有小伙伴要其他内容的话&#xff0c;我会追加内容的。&#xff08;前提是我有学过&#xff0c;或者能学会&#xff09; 接下来&#xff0c;我们就要开始python内容的学习了 ~ ~ 目录 1 …

Github 2024-03-22 开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3C#项目1Java项目1Rust项目1Go项目1Shell项目1非开发语言项目1TypeScript项目1Colossal-AI:使大型人工智能模型更加实惠和快速训练的…

吴恩达机器学习笔记 二十六 决策树学习过程 独热编码one-hot

决策树的学习过程 1. 所有样本都在根结点 2.计算所有可能的特征的信息增益&#xff0c;选择信息增益最大的那个 3.根据选择的特征分离数据集&#xff0c;创造左右两支子树 4.继续进行分裂直到达到停止标准。停止标准有&#xff1a;一个节点只有一类样本&#xff1b;分裂一…

[ABC206E] Divide Both 解题记录

[ABC206E] Divide Both 解题记录 题意简述 给定整数 L , R L,R L,R&#xff0c;求满足以下条件的数对 ( x , y ) (x,y) (x,y) 的数量。 x , y x,y x,y 不互质 x ∤ y x \nmid y x∤y 且 y ∤ x y \nmid x y∤x 题目分析 正难则反&#xff0c;考虑用所有的满足第一条性质的…

javascript中Date相关方法

Date 对象用于处理日期和时间 序号方法描述1new Date()获取当前时间2parse()返回毫秒数&#xff08;从 1970-1-1 00:00:00开始&#xff09;3getDate()返回月中的第几天&#xff08;从 1 到 31&#xff09;4getFullYear()返回年份5getMonth()返回月份&#xff08;从 0-11&#x…

1Panel应用推荐:DataEase开源数据可视化分析工具

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

Django在日志中使用AdminEmailHandler发送邮件(同步),及celery异步发送日志邮件的实现

目录 一、使用AdminEmailHandler实现发送日志通知邮件 1&#xff0c;配置日志项 2&#xff0c;配置邮件项 3&#xff0c;在视图里使用日志 二、继承AdminEmailHandler使用celery实现异步发送邮件 1&#xff0c;安装配置celery 2&#xff0c;继承AdminEmailHandler类&…

【excel】常用的50个函数与基础操作(查询函数)

查询函数 &#xff08;1&#xff09;VLOOKUP与MATCH综合 1. VLOOKUP 按列纵向查找&#xff0c;输出单元格内容 VLOOKUP&#xff08;用谁找&#xff0c;在哪找&#xff0c;在哪列&#xff0c;精确/模糊&#xff09; 条件用&连接 VLOOKUP&#xff08;用谁找&#xff0c;在…

网络安全知识核心之TCP与UDP区别

TCP 面向连接&#xff08;如打电话要先拨号建立连接&#xff09;提供可靠的服务;UDP 是无连接的&#xff0c;即发送数据之前不需要建立连接&#xff0c;;UDP 尽最大努力交付&#xff0c;即不保证可靠交付。&#xff08;由于 UDP 无需建立连接&#xff0c;因此 UDP 不会引入建立…

HTML元素语义化(二)及补充

文章目录 HTML5新增元素 - audio**常见属性**代码展示 audio支持的音频格式input元素的扩展内容新增全局属性data–css属性 –white–spacecss属性–text–overflow HTML5新增元素 - audio HTML 元素用于在文档中嵌入音频内容, 和video的用法非常类似 常见属性 常见属性 值…

ts js vue 验证文件 MD5 值 spark-md5

ts js vue 验证文件 MD5 值 spark-md5 如何在前端中验证要上传的文件的 md5 值 一、安装 spark-md5 插件 需要用到 spark-md5 这个插件 官方 github&#xff1a;https://github.com/satazor/js-spark-md5/tree/master yarn add spark-md5 // 或 npm i spark-md5使用的时候引…

基于python+vue文学名著分享系统的设计与实现flask-django-nodejs-php

随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的文学名著分享系统。当前的信息管理存在工作效率…

编程题:二叉树层次遍历(Java)

有一棵二叉树&#xff0c;每个节点由一个大写字母标识(最多26个节点&#xff09;。 现有两组字母&#xff0c;分别表示后序遍历&#xff08;左孩子->右孩子->父节点&#xff09;和中序遍历&#xff08;左孩子->父节点->右孩子&#xff09;的结果&#xff0c;请你输…

有没有适合pr剪辑视频使用的蓝色魔法火焰能量特效素材模板

12个蓝色魔法火焰能量特效VFX元素pr素材模板。 可定制的能量电荷、灰尘等离子体和发光的电火花是游戏电影、电影特效或有影响力的视频内容的理想选择&#xff0c;增添了史诗般的电影质量。无论是神秘的爆炸、闪闪发光的闪电还是旋转的漩涡&#xff0c;每一部动画都是力量的灯塔…

Git版本控制

这是两个学习Git推荐必看的文档&#xff0c;第一个链接是Git的官方权威文档&#xff0c;第二个链接是国内程序员在开发中&#xff0c;总结的Git快速入门教程&#xff0c;掌握这个&#xff0c;也足够应付在工作中的场景。 Git权威书籍《ProGit》中文版https://gitee.com/progit…

让天下没有难学的大模型!我整理一份大模型技术知识图谱!

最近陆续有一些同学反馈&#xff0c;感觉大模型知识点太多了&#xff0c;找不到头绪。 今天我整理一份大模型技术以及应用的知识图谱&#xff0c;让大家轻松学习大模型&#xff0c;喜欢点赞、收藏、关注。 另外&#xff0c;技术交流可以文末加入我们。 大模型的预训练技术 …