数据结构:lambda表达式

news2024/10/6 6:05:27

基本概念

语法

// 1. 不需要参数,返回值为 2
() -> 2
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的和
(x, y) -> x + y
// 4. 接收2个int型整数,返回他们的乘积
(int x, int y) -> x * y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)

函数式接口

定义:一个接口有且只有一个抽象方法

如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序编译就会报错的。

例子:

//无返回值无参数
@FunctionalInterface
interface NoParameterNoReturn {
    void test();
}

我们来给test()里面加点内容并实现,采用创建匿名内部类的方法,重写test()并打印

    public static void main(String[] args) {
        //匿名内部类
        NoParameterNoReturn noParameterNoReturn = new NoParameterNoReturn() {
            @Override
            public void test() {
                System.out.println("重写test方法");
            }
        };
        noParameterNoReturn.test();
    }

但现在有了lambda表达式,上面那段代码就可以简化了

    public static void main(String[] args) {
        NoParameterNoReturn noParameterNoReturn = ()-> System.out.println("重写test方法");
        noParameterNoReturn.test();
    }

其他的函数式接口

//无返回值一个参数
@FunctionalInterface
interface OneParameterNoReturn {
    void test(int a);
}
public class Test {
    public static void main(String[] args) {
        OneParameterNoReturn oneParameterNoReturn = (a) -> {
            System.out.println("oneParameterNoReturn:" + a);
        };
        oneParameterNoReturn.test(10);
    }
}
//无返回值多个参数
@FunctionalInterface
interface MoreParameterNoReturn {
    void test(int a,int b);
}
public class Test {
    public static void main(String[] args) {
        MoreParameterNoReturn moreParameterNoReturn = (a,b) -> System.out.println(a+b);
        moreParameterNoReturn.test(1,2);
    }
}
//有返回值无参数
@FunctionalInterface
interface NoParameterReturn {
    int test();
}
public class Test {
    public static void main(String[] args) {
        //NoParameterReturn noParameterReturn = ()->{return 10;};
        NoParameterReturn noParameterReturn = ()->10;
        System.out.println(noParameterReturn.test());
    }
}
//有返回值一个参数
@FunctionalInterface
interface OneParameterReturn {
    int test(int a);
}
public class Test {
    public static void main(String[] args) {
        OneParameterReturn oneParameterReturn = a->a+10;
        System.out.println(oneParameterReturn.test(1));
    }
}
//有返回值多参数
@FunctionalInterface
interface MoreParameterReturn {
    int test(int a,int b);
}
public class Test {
    public static void main(String[] args) {
        MoreParameterReturn moreParameterReturn = (a,b) -> a+b;
        System.out.println(moreParameterReturn.test(1, 2));
    }
}

一些精简策略

1. 参数类型可以省略,如果需要省略,每个参数的类型都要省略。
2. 参数的小括号里面只有一个参数,那么小括号可以省略
3. 如果方法体当中只有一句代码,那么大括号可以省略
4. 如果方法体中只有一条语句,且是 return 语句,那么大括号可以省略,且去掉 return 关键字。

变量捕获 

    public static void main(String[] args) {
        int a = 10;
        NoParameterNoReturn noParameterNoReturn = ()->{
            System.out.println("捕获变量:"+a);
        };
        noParameterNoReturn.test();
    }

这里的变量a就是采用lambda表达式捕获的变量,这个变量在使用前不能被修改,要不然就加个final就不怕手贱修改了


lambda表达式的接口

 比如我们要打印下面的字符串

"bit";
"lambda";
"hello";

1.ArrayList类实现

        ArrayList<String> list = new ArrayList<>();
        list.add("bit");
        list.add("lambda");
        list.add("hello");
1.1 forEach()方法

这个方法实现了Consumer接口,我们需要做的就是重写这个accept方法让它打印字符串就行

        //不用lambda
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        //lambda
        list.forEach(s -> System.out.println(s));
1.2 sort()方法

这个方法实现Coparator接口,重写compare方法打印字符串

        //lambda
        list.forEach(s -> System.out.println(s));
        //不用lambda
        list.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        //lambda
        list.sort((o1, o2) -> o1.compareTo(o2));

2.Map实现

        HashMap<Integer, String> map = new HashMap<>();
        map.put(1, "hello");
        map.put(2, "bit");
        map.put(4, "lambda");

forEach()方法

        //不用lambda
        map.forEach(new BiConsumer<Integer, String>() {
            @Override
            public void accept(Integer integer, String s) {
                System.out.println("key: "+integer+" val: "+s);
            }
        });
        //lambda
        map.forEach((key,val)->System.out.println("key: "+key+" 

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

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

相关文章

【外汇天眼】投资之道:成功背后的频繁交易陷阱

成功的投资需要超越人性的短板&#xff0c;其中之一就是频繁交易。巴菲特曾明言&#xff0c;如果商学院的毕业生在毕业后拿一张卡片&#xff0c;每买一支股票就打一个洞&#xff0c;那么这张卡片最终会被打得最少的人将成为巨富。“钱在这里从活跃的投资者流向有耐心的投资者。…

leetcode——设计循环队列

设计循环队列 这个题目在这里小编只分享一个解题思路&#xff0c;因为还有一个思路小编还在尝试&#xff0c;一直过不了&#xff0c;还在这里不断尝试&#xff0c;等我试出来的时候我在分享给大家&#xff0c;首先我们在这里给出的是数组的形式&#xff0c;后面在分享单链表的思…

Python loglog()函数

常用坐标下的图像显示 import matplotlib.pyplot as plt import numpy as np import mathplt.figure() x_input np.linspace(1, 10, 50) y_input x_input**2plt.plot(x_input, y_input,r-,linewidth2) plt.show()在loglog函数尺度下的曲线 plt.loglog(x_input, y_input,r-,…

筒仓料位监测|敢不敢对“精度”下狠手!您家筒仓料位测得准吗?

您家是不是还在人工敲仓估算&#xff1f; 您能精确知道料位和库存吗&#xff1f; 您能实时看到库存盈亏吗&#xff1f; 筒仓里装了什么&#xff1f;用了多少&#xff1f; 什么时候进料最划算&#xff1f; 您家的筒仓管理方式可靠吗&#xff1f; 上海思伟筒仓料位监测方案 看…

Atlassian发布最新补贴政策,Jira/Confluence迁移上云最低可至零成本

到2024年2月15日&#xff0c;Atlassian将不再提供对Jira、Confluence、Jira Service Management等Server版产品的支持。 近期&#xff0c;Atlassian推出了一项针对云产品的特殊优惠。现在从Server版迁移到云版&#xff0c;您能享受到高额补贴&#xff0c;甚至成本低至零元。立…

计算机网络——数据链路层简解

1. 前言&#xff1a; 数据链路层&#xff0c;即在物理层之上网络层之下&#xff0c;数据链路层的数据交互可以通过mac来确实身份和发送数据。 说到数据链路层这里简单介绍下设备&#xff1a; 网桥&#xff08;Bridge&#xff09;&#xff1a; 网桥是一种数据链路层设备&#…

C语言——深入理解指针——函数指针

一、函数指针变量 1.1 函数指针变量的创建 什么是函数指针变量呢&#xff1f; 函数指针变量应该是用来存放函数地址的&#xff0c;未来通过地址能够调⽤函数的。 那么函数是否有地址呢&#xff1f; 我们做个测试&#xff1a; #include <stdio.h> void test() {print…

纽扣电池类产品上架亚马逊澳大利站认证标准要求AS/NZS 62368

纽扣电池一般来说常见的有充电的和不充电的两种&#xff0c; 充电的包括3.6V可充锂离子扣式电池(LIR系列)&#xff0c;3V可充锂离子扣式电池(ML或VL系列)&#xff1b;不充电的包括3V锂锰扣式电池(CR系列)及1.5V碱性锌锰扣式电池(LR及SR系列)。 澳大利亚*已经发布了经批准的《消…

重装系统后如何恢复以前的文件?详细教程大揭秘!

在日常生活中&#xff0c;我们可能会遇到各种计算机问题&#xff0c;其中最严重的问题之一就是需要重装系统。在重装系统之前&#xff0c;我们通常需要考虑一个问题&#xff1a;重装系统后还能恢复以前的文件吗&#xff1f; 首先&#xff0c;我们需要明确一点&#xff0c;重装…

为了摆脱 Android ,亚马逊开发基于Linux的操作系统

导读亚马逊一直在开发一种新的操作系统 —— 内部代号为 “Vega”&#xff0c;以便在 Fire TV、智能显示器和其他联网设备上取代 Android 系统。 亚马逊一直在开发一种新的操作系统 —— 内部代号为 “Vega”&#xff0c;以便在 Fire TV、智能显示器和其他联网设备上取代 Andr…

虹科干货丨TWAMP:什么是双向主动测量协议?

来源&#xff1a;虹科网络安全 虹科干货丨TWAMP&#xff1a;什么是双向主动测量协议&#xff1f; 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 导语 TWAMP&#xff08;双向主动测量协议&#xff09;是什么&#xff1f;它在网络性能测量中有什么作用&#xff1f;如…

Java 多线程进阶

1 方法执行与进程执行 GetMapping("/demo1")public void demo1(){//方法调用new ThreadTest1("run1").run();//线程调用new ThreadTest1("run2").start();} 下断点调试信息&#xff0c;可以看到run()方法当前线程是“main1” 继续运行到run里面&…

练习六-使用Questasim来用verilog使用function函数

[TOC](使用Questasim来用verilog使用function函数 1&#xff0c;verilog中使用函数function2&#xff0c;RTL代码3&#xff0c;测试代码4&#xff0c;输出波形 1&#xff0c;verilog中使用函数function 目的&#xff1a; &#xff08;1&#xff09;了解函数的定义和在模块设计中…

问题解决:Ubuntu18.04下nvcc -V指令可用,/usr/local/下却没有cuda文件夹,原因分析及卸载方法

问题描述 今天要运行一个程序&#xff0c;需要CUDA版本高于10.0&#xff0c;我的电脑无法运行&#xff0c;于是开始检查 首先使用nvidia-smi与nvcc -V指令 能够看出来&#xff0c;当前显卡驱动适合的CUDA版本为12.1&#xff0c;而本机安装的版本是9.1.85&#xff0c;那么就需…

使用Navicat将SQL server数据库导入mysql数据库

使用Navicat将SQL server数据库导入mysql数据库 1、使用Navicat Premium打开MySql数据库&#xff0c;然后新建一个数据库名&#xff08;该数据库名称为需要从SqlServer数据库导过来的名称&#xff0c;mysql只有小写&#xff0c;不影响&#xff09; 比如需要将SqlServer数据库…

亚马逊澳大利亚纽扣电池UL4200A认证标准和要求

近来&#xff0c; 与纽扣电池相关的死亡和严重伤害越来越多。 美国消费品安全委员会(CPSC)的工作人员正在参与与消费品电池相关的自愿标准活动&#xff0c;包括UL 4200A -采用锂技术的纽扣或纽扣电池的产品安全标准。 一、适用产品有&#xff1a; 1. 安装有直径 ≤32mm&#x…

在ITSM中,实施变更管理的重要因素!

在ITSM管理中&#xff0c;变更管理是不可或缺的一步。在当今快速变革的商业环境中&#xff0c;组织需要不断地进行变更以适应市场的需求和竞争的压力。 然而&#xff0c;引入变更并成功地实施变更并不容易。变更管理是一种系统化和结构化的方法&#xff0c;旨在确保变更顺利进…

如何利用 AI 写一本书并实现被动收入

如何每个月写一本能赚 5000 美元的书&#xff1f;不少人不知道如何在一周内写作和出版一本书 这里有个教程教你如何利用 AI 写一本书并实现被动收入 [收藏起来以备后用] 推出书友智能写作工具&#xff1a;Bookwiz 不用花几年时间独自写作一本小说&#xff0c;人工智能可以作…

获取1688店铺所有商品、店铺列表api

返回数据格式&#xff1a; 请求链接 {"user": [],"items": {"item": [{"num_iid": "738354436678","title": "国产正品i13 promax全网通5G安卓智能手机源头厂家批发手机","pic_url": "…

【操作系统】文件系统的逻辑结构与目录结构

文章目录 文件的概念定义属性基本操作 文件的结构文件的逻辑结构文件的目录结构文件控制块&#xff08;FCB&#xff09;索引节点目录结构 文件的概念 定义 在操作系统中&#xff0c;文件被定义为&#xff1a;以计算机硬盘为载体的存储在计算机上的信息集合。 属性 描述文件…