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;除了新增角色外在配置…

使用专属浏览器在国内直连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;分裂一…

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类&…

网络安全知识核心之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;建立一套合理、动态的、交互友好的、高效的文学名著分享系统。当前的信息管理存在工作效率…

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

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

Git版本控制

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

Android Studio 编译报错 ( Could not find com.android.tools.build:gradle:4.2.1.)

检查下根目录下的 build.gradle 配置 , 是否只配置了 jcenter 仓库 &#xff0c;加上 google()mavenCentral() 重新编译试一下

全网最靠谱的短网址平台,你知道几个?

在当今互联网时代&#xff0c;短网址平台成为了人们分享链接的常用工具。它们不仅可以将冗长的网址压缩为简洁的短链接&#xff0c;还能提供更多的功能和优势。在众多的短网址平台中&#xff0c;有几个平台以其可靠性和出色的性能脱颖而出。今天&#xff0c;我们就来介绍几个全…

《数字人》三个灵魂拷问 是什么?为什么?怎么用?

数字人的出现和发展是由于人工智能和计算机图形学等技术的进步&#xff0c;使得我们可以更好地模拟和创造人类的外貌、行为和交流能力。 1.数字人是什么&#xff1f; 数字人通常是指利用计算机技术和人工智能技术创建的虚拟人物或角色。这些数字化的人物可以具有各种外貌、行为…

计算机网络基础知识

一、网络概述 1.网络定义与功能 利用通信线路物理地将不同的终端连接起来&#xff0c;按照网络协议相互通信&#xff0c;以共享软件、硬件和数据资源为目标的系统 数据通信&#xff1a;在计算机之间传送各种信息 资源共享&#xff1a;硬件资源共享、软件资源共享 负荷均衡&am…

鸿蒙开发钱途不可限量!万人大厂岗位激增月入2万机会来了

抢人&#xff01;抢人&#xff01;抢人&#xff01; 抢滩鸿蒙&#xff0c;人才先行。2024年鸿蒙人才抢夺大战一触即发&#xff0c;刻不容缓。 随着时代的发展&#xff0c;就业竞争愈加激烈&#xff0c;内卷化越来越严重。如今互联网行业以及计算机软件开发领域成为了很多大学…

transformer的学习:Attention is all you need

目录 整体概述&#xff1a;​编辑​编辑 encoder&#xff1a; embedding&#xff1a; ​编辑 self-attention&#xff1a; 向量的相似度计算&#xff1a; qkv怎么来的​编辑 softmax&#xff1a; code multi-head-attention 位置编码&#xff1a; 残差&&FFN&…

使用ansible剧本进行lvm分盘

使用 Ansible 剧本&#xff08;Playbook&#xff09;进行 LVM 分区管理是一种自动化的方式&#xff0c;可以帮助管理员在多台主机上批量管理逻辑卷。 部署环境 3台主机&#xff0c;添加硬盘 ansible-galaxy collection install community.general 联网执行&#xff0c;下…