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

news2024/9/29 15:18:40

一、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() {
            @Override
            public 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>() {
            @Override
            public 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<>();
        //1000w
        for (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.coloradmin.cn/o/1538073.html

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

相关文章

Error Lens插件

最近在看视频学习的时候&#xff0c;发现了一个我认为很好用的插件。 就是Error Lens&#xff0c;这个插件它能够以高亮、内联显示代码中的错误、警告和其他诊断信息&#xff0c;让开发者无需查看控制台或问题面板&#xff0c;就能在编辑代码的过程中直观地看到并快速定位到代码…

网络工程师练习题6

网络工程师 综合题 计算并填写下表&#xff1a; TP地址191.23.181.13子网掩码255.255.192.0地址类型 &#xff08;1&#xff09;网络地址&#xff08;2&#xff09;直接广播地址&#xff08;3&#xff09;主机号&#xff08;4&#xff09;子网内的最后一个可用IP地址&#xf…

现代游戏引擎架构

一、并行编程 1.1 为什么需要并行编程 游戏的渲染计算对算力要求很高&#xff0c;所以我们需要把操作系统的资源利用到极致。 但是摩尔定律已经不在适用了&#xff0c;硬件的发展目前已经达到瓶颈。所以我们需要通过数量来提高计算效率。 1.2 并行编程基础 进程与线程&#…

【python开发】安装配置启动+数据库管理+表管理+数据行管理+python操作Mysql及相关安全的问题

Mysql入门 一、安装&启动1、安装2、测试3、设置和修改root密码 二、数据库管理1、内置客户端操作&#xff08;1&#xff09;查看当前所有的数据库(show databases);&#xff08;2&#xff09;创建数据库&#xff1a;create database learn&#xff08;数据库名&#xff09;…

FEX-Emu在Debian/Ubuntu系统使用

FEX-Emu在Debian/Ubuntu系统使用 1. Debootstrap子系统安装&#xff08;可选&#xff09;2. Debian/Ubuntu依赖包安装3. 获取FEX-Emu源码并编译4. 根文件系统RootFS安装5. 基于 FEX-Emu 运行应用 1. Debootstrap子系统安装&#xff08;可选&#xff09; sudo apt-get install …

Spring Boot 3 极速搭建OAuth2认证框架

本篇环境 Java 17Spring Boot 3.2.3Spring Authorization Server 1.2.3开发工具 SpringToolSuite4Spring Boot 3.2.3 需要JDK 17及之上的版本。 项目初始化 项目可以使用Spring的初始化器生成, 也可以创建一个Maven类型的项目。 项目创建后的目录结构如下: 项目配置 使用 …

1、goreplay流量回放

目的 在实际项目中&#xff0c;会有大量的回归测试工作&#xff0c;通常会使用自动化代码的手段来实现回归&#xff0c;但是对于一个庞大的系统来说&#xff0c;通过自动化脚本的方式来实现回归测试&#xff0c;又显得很费时费力。并且如果有定期将线上数据同步到测试环境的需求…

GStreamer简单看看

主要是现在弄摄像头&#xff0c;要用到这东西。所以学学。 最权威主页&#xff1a;GStreamer: open source multimedia framework 大概看了下&#xff0c;好像命令也不难。 gst-launch-1.0 v4l2src device/dev/video0 ! video/x-raw,formatYUY2,width640,height480,framerat…

Java项目:71 ssm基于ssm+vue的外卖点餐系统+vue

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统功能 系统分为前台订餐和后台管理&#xff1a; 1.前台订餐 用户注册、用户登录、我的购物车、我的订单、商品列表 2.后台管理 商品管理&#xf…

PID算法原理分析及优化

今天为大家介绍一下经典控制算法之一的PID控制方法。PID控制方法从提出至今已有百余年历史&#xff0c;其由于结构简单、易于实现、鲁棒性好、可靠性高等特点&#xff0c;在机电、冶金、机械、化工等行业中应用广泛。 在大学期间&#xff0c;参加的智能汽车竞赛中就使用到了PI…

WordPress站点如何实现发布文章即主动推送到神马搜索引擎?

平时boke112百科很少关注到神马搜索引擎&#xff0c;近日有站长留言想要实现WordPress站点发布文章就主动推送到神马搜索引擎&#xff0c;而且推送成功就自动添加一个自定义字段&#xff0c;以防重复推送。 登录进入神马站长平台后才知道神马也有一个API推送功能&#xff0c;不…

33.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-游戏登录数据包分析利用

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;32.网络数据分析…

【Spring框架】单元测试:JUnit

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

LeetCode 79 单词搜索

题目描述 单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是…

基于飞凌嵌入式i.MX6ULL核心板的电梯智能物联网关方案

电梯是现代社会中不可或缺的基础性设施&#xff0c;为人们的生产生活提供了很大的便捷。我国目前正处于城镇化的快速发展阶段&#xff0c;由此带动的城市基础设施建设、楼宇建设、老破小改造等需求也让我国的电梯行业处在了一个高速增长期。截至2023年年底&#xff0c;中国电梯…

每日算法之盛最多的水

算法题如下&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你…

【JS】如何避免输入中文拼音时触发input事件

现有一段代码&#xff0c;监听input事件。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" con…

Vscode与Cmake搭配配置opencv使用

vscode与Cmake基本使用 下载插件 CtrlShiftp打开VSCode的指令面板&#xff0c;然后输入cmake:q&#xff0c;VSCode会根据输入自动提示&#xff0c;然后选择CMake: Quick Start选择编译器根据提示输入项目名称选择可执行文件编译项目 方式一&#xff1a;执行命令cd build cmake…

Gitlab的流水线任务【实现每小时自动测试 dev分支的更新】

背景 在现代软件开发实践中&#xff0c;持续集成&#xff08;Continuous Integration, CI&#xff09;是确保代码质量和快速响应软件缺陷的关键策略。GitLab 提供了强大的 CI/CD 功能&#xff0c;允许开发者自动化测试和部署流程。本文将介绍如何设置 GitLab 流水线计划任务&a…

VMware 虚拟机安装 CentOS Stream 9【图文详细教程】

系统需要开启虚拟化 VMware Pro 17 安装&#xff1a;https://www.yuque.com/u27599042/ccv8wh/ztmn0vkg3iimqyed CentOS Stream 9 镜像下载 https://www.centos.org/centos-stream/根据你电脑的操作系统类型&#xff0c;选择点击下载 创建虚拟机 在 VMware 中&#xff0c;…