Java高级编程之Lambda表达式

news2025/7/19 11:16:01

Lambda表达式

1,语法

利用Lambda 可以更简洁的实现匿名内部类与函数声明与调用;另外,基于Lambda 提供stream 流式处理极大简化对集合的操作

image-20230224145230659

public static void main(String[] args) {
        //1.标准Lambda使用方式,其中MathOperation为定义的一个四则运算接口
        //约束条件:Lambda表达式只能实现有且只有一个抽象方法的接口,Java称为"函数式接口"
        MathOperation addition = (Integer a,Integer b)->{
            System.out.println("加法运算");
            return a+b+0f;
        };
        System.out.println(addition.operate(5,3));
        /*等价代码
        class Addition implements MathOperation{
            @Override
            public Float operate(Integer a, Integer b) {
                System.out.println("加法运算");
                return a+b+0f;
            }
        }
        Addition addition = new Addition();
        System.out.println(addition.operate(5,3));
        */

2,基于Lambda 实现函数式编程

函数式编程是基于函数式接口并使用lambda 表达的编程方式,其编程理念是将代码作为可重用数据带入到程序运行中,强调的是“你想做什么”,而不是“你想怎么做”。

那什么是函数式接口呢?函数式接口是有且只有一个抽象方法的接口。

Predicate函数式接口

  • Predicate 是新增的函数式接口,位于java.util.function 包下
  • Predicate 用于测试传入的数据是否满足判断要求
  • Predicate 接口需要实现 test() 方法进行逻辑判断

例子实战:

/**
 * 理解函数式编程
 * Predicate函数式接口的使用方法
 */
public class PredicateSample {
    public static void main(String[] args) {
        Predicate<Integer> predicate = n->n<4;
        boolean result = predicate.test(10);
        System.out.println(result);
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        /*for(Integer num:list){
            if(num%2==1){
                System.out.println(num);
            }
        }*/

        filter(list,n->n%2==1); //取所有奇数
        filter(list,n->n%2==0); //取所有偶数
        filter(list,n->n>5 && n%2==0); //取所有大于5的偶数
    }
    public static void filter(List<Integer> list , Predicate<Integer> predicate){
        for(Integer num:list){
            if(predicate.test(num)){
                System.out.print(num + " ");
            }
        }
        System.out.println("");
    }
}

3,Stream 流式处理

Stream 流式处理是建立在Lambda 基础上的多数据处理技术,对集合数据处理进行高度抽象,极大简化代码量;Stream 可对集合进行迭代,去重,筛选,排序,聚合等一系列处理。

Stream 流对象的常用创建方式:

  • 1,基于数组进行创建

        public void generator1(){
            String[] arr = {"Lily" , "Andy" , "Jackson" , "Smith"};
            Stream<String> stream = Stream.of(arr);//通过Stream.of方法将数组创建为流对象
            stream.forEach(s->System.out.println(s));
        }
    
  • 2,基于集合进行创建

     public void generator2(){
            List<String> list = new ArrayList<>();
            list.add("Lily");
            list.add("Andy");
            list.add("Jackson");
            list.add("Smith");
            Stream<String> stream = list.stream();
            stream.forEach(s->System.out.println(s));
        }
    
  • 3,利用generate 方法创建无限长度流

       public void generator3(){
            Stream<Integer> stream = Stream.generate(() -> new Random().nextInt(100000));
            stream.limit(10).forEach(i->System.out.println(i));//随机输出10个数
        }
    

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

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

相关文章

React 跨域的配置

1、为什么会出现跨域&#xff1f; 浏览器遵循同源政策&#xff08;同源策略三要素&#xff1a;协议相同、域名相同、端口相同&#xff09; 2、配置跨域代理 使用中间件 http-proxy-middleware&#xff08;安装依赖&#xff09; npm install http-proxy-middleware 创建setupP…

为什么需要这个岗位,软件测试是干什么

目录 一、软件测试概念 二、软件测试目的 三、软件测试基本原则 四、软件测试主要工作内容 五、软件测试方法 六、测试工程师的职责 七、为什么要软件测试这个岗位 一、软件测试概念 软件测试&#xff1a;为了发现软件错误和缺陷&#xff08;统称bug&#xff09;而执行…

网络协议(八):传输层-TCP(三次握手、四次挥手原理)

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 网络…

拒绝摆烂!神仙网站Python自学,一路从入门闯到最后,边学边玩

前言给大家推荐3个边玩边学python的网站在刚接触编程&#xff0c;培养对其持续的兴趣是最最重要的事情辣&#xff01;&#xff01;&#xff01;因为前期需要大量的基础代码知识积累&#xff0c;这个过程对于不少人来说还是挺枯燥的&#xff0c;很有可能学到一半就放弃了&#x…

中电金信:金融数字化转型路在何方?这里有答案

近期&#xff0c;媒体大数网整合了业内10份研究报告&#xff0c;详解金融数字化转型的思路、方法与路径。其中「中国电子金融级数字底座“源启”白皮书」也被收录其中。让我们一同阅读文章&#xff0c;探究金融数字化转型相关问题的答案吧。 当前&#xff0c;金融科技正在回归…

大厂跟进ChatGPT,为什么百度“文心一言”成色最好?【快评】

作者 | 曾响铃 文 | 响铃说 赶ChatGPT热度&#xff0c;百度3月初就要发布与ChatGPT类似的人工智能聊天机器人服务“文心一言”&#xff08;英文名&#xff1a;ERNIE Bot&#xff09;&#xff0c;似乎无法提振资本市场对百度的信心。 2022年第四季度及全年未经审计的财报发布…

Python-基础知识

Python是什么 Python是计算机编程语言。 Python是解释型语言&#xff1a;Python在执行时&#xff0c;首先会将.py文件中的源代码转换成Python字节码&#xff0c;然后再由Python虚拟机来执行编译好的字节码。 名词解释 Python解释器&#xff08;Interpreter&#xff09;&#…

Text to image论文精读ALR-GAN:文本到图像合成的自适应布局优化

ALR-GAN是北京工业大学学者提出的一种自适应布局优化生成对抗网络&#xff0c;其可以在没有任何辅助信息的情况下自适应地优化合成图像的布局。 文章发表于2023年&#xff0c;IEEE Transactions on Multimedia&#xff08;TMM&#xff09;期刊&#xff08;CCF B&#xff0c;JCR…

基于Frenet优化轨迹的⾃动驾驶动作规划⽅法

动作规划&#xff08;Motion Control&#xff09;在⾃动驾驶汽⻋规划模块的最底层&#xff0c;它负责根据当前配置和⽬标配置⽣成⼀序列的动作&#xff0c;本⽂介绍⼀种基于Frenet坐标系的优化轨迹动作规划⽅法&#xff0c;该⽅法在⾼速情况下的ACC辅助驾驶和⽆⼈驾驶都具有较强…

浅谈MySQL索引

目录 1.索引的定义 2.索引的原理 3.Hash索引与B Tree索引 4.索引的分类 5.建立索引的注意事项 1.索引的定义 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索…

python常见问题详解

Python python 没有多态&#xff0c;而是鸭子类型 多继承&#xff0c;没有接口&#xff0c;可通过语法糖实现接口的作用 lambda中只能有一句 "/"表示之前的参数是必须是位置参数&#xff0c;”**“表示是后面的必须是关键字参数 Python多进程 Python 多线程是伪多线…

ASE0510SH-ASEMI的MOS管ASE0510SH

编辑-Z ASE0510SH在SOT-89封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为140mΩ&#xff0c;是一款N沟道中低压MOS管。ASE0510SH的最大脉冲正向电流ISM为15A&#xff0c;零栅极电压漏极电流(IDSS)为1uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。ASE0510…

Mac电脑_GitHub提交项目至仓库

第一步&#xff08;准备工作&#xff09;&#xff1a; Mac 电脑自带 git &#xff0c; 无需安装 1. 创建一个项目 demo1 在 github 上 2. 创建 ssh 密钥 打开终端&#xff1a; ssh-keygen -t rsa -C "your_emailyouremail.com" 此处输入两次密码&#xff0c; 直接…

Linux-MYSQL 登录数据库(命令行,图形化) 及 远程登录

命令行登录 &#xff1a;mysql 命令登录数据库语法 &#xff1a; mysql -u用户名 -p密码 -h 连接的数据库服务器的ip [-D] 数据库名 -p 端口注 &#xff1a; 上面的 mysql 命令是指的是 客户端的指令 ~&#xff01;&#xff01;-h &#xff1a; 指的就是 连接数据库服务器的 ip…

并发编程学习篇ReentrantLock设计思想剖析

一、AQS原理剖析 什么是AQS java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为&#xff0c;比如 等待队列、条件队列、独占获取、共享获取等而这些行为的抽象就是基于AbstractQueuedSynchronizer&#xff08;简称AQS&#xff09;实现的&#xff0c;AQS是一…

如何使用开源 BI 工具 DataEase 实现系列数据分析呢?

当我们使用可视化分析工具制作仪表板时&#xff0c;可能需要制作的仪表板不是单个单个的可视化大屏&#xff0c;而是一系列的仪表板&#xff0c;我们需要用它来产生一个连续性的故事&#xff0c;那么这个时候我们该怎么办呢&#xff1f;例如说总分形式&#xff0c;我们需要一个…

18. linux系统基础

shell 命令解析器 命令解析器作用&#xff1a; 他把在终端上输出的命令 给你解析成内核可以识别的指令&#xff0c;内核 是经过命令解析器的加工 shell在找命令的时候&#xff0c;所包含的路径&#xff0c;就是在这些路径里去 找 找到就执行 找不到就报错 报错 要么 这个命…

mars3d加载建筑物白膜及简单建筑物样式

首先需要拥有shp格式的数据。可以通过水经微图下载&#xff0c;注意此软件是付费的将shp格式的数据处理为切片数据&#xff0c;可以使用cesiumlab处理完成得到json数据就可以在mars3d中加载了 function init() { // 判断webgl支持 if (!mars3d.Util.webglreport()) { …

20分钟10张动图8个示例带你更好的理解EventLoop

介绍 JavaScript 主要在 Node.js 和浏览器中的单个线程上执行(有一些例外,例如工作线程,这超 出了当前文章的范围)。在本文中,我将尝试解释 Node.js 的并发机制,即事件循环。 例子 我相信通过示例学习是最好的,因此我将从 4 个简单的代码示例开始。我将分析示…

持久化存储PV与PVC

1.PV与PVC PV&#xff1a; 持久卷&#xff08;PersistentVolume&#xff09;简称PV&#xff0c;是集群中的一块存储&#xff0c;可以由管理员事先供应。 可以配置NFS、Ceph等常用存储配置&#xff0c;相对于volumes&#xff0c;提供了更多的功能&#xff0c;如生命周期管理、大…