数据结构:lambda表达式

基本概念

语法

// 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+" 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

支持导入ics文件的提醒待办类工具

上个月腾讯待办突然发布因业务发展方向调整&#xff0c;腾讯待办将于2023年12月20日停运并下架&#xff0c;如需保存数据请在停运日期前导出数据&#xff0c;打开腾讯待办后会弹出保存数据的操作提示。 官方发布消息后&#xff0c;很多人不禁疑问&#xff1a;腾讯待办停运后还…

系列十、ReentrantReadWriteLock

一、概述 ReentrantReadWriteLock是ReadWriteLock的一个子类&#xff0c;具有读锁和写锁的双重功能&#xff0c;通常用于做缓存。 二、案例代码 2.1、ReentrantReadWriteLockCache /*** Author : 一叶浮萍归大海* Date: 2023/11/20 17:57* Description: 使用ReentrantReadWri…

淘宝商品详情数据接口(Taobao.item_get)

淘宝商品详情接口是一种程序化的接口&#xff0c;允许开发者根据商品ID或商品链接&#xff0c;获取淘宝平台上的商品详细信息。通过这个接口&#xff0c;开发者可以方便地获取商品的标题、价格、销量、描述等数据&#xff0c;进而提供给用户进行展示和购买。 使用淘宝商品详情…

【微信公众号开发】1.3 编辑模式之自动回复

一、内容 二、回复分类 首先开启自动回复 1. 关键词回复 2. 收到消息回复 3. 被关注回复 三、实战 1. 微信扫码关注 2. 回复1,2 一、内容 关注订阅号自动回复功能 二、回复分类 说明关键词回复可以根据设置关键字回复收到消息回复开发能力&#xff0c;灵活回复&…

STM32获取最大堆栈空间

参考 stackflow相关讨论 原理 通过参考链接&#xff0c;可知探测Stack的最大深度是先在stack中填充不常用的特定值&#xff0c;然后实时检测这些值哪些发生了变化&#xff0c;变化的表示使用到了这个空间&#xff0c;如果程序完全遍历后&#xff0c;有些值还是没变&#xff…

Django学习日志08

如何开启事务 事务的目的&#xff1a;为了保证多个SQL语句执行成功&#xff0c;执行失败&#xff0c;前后保持一致&#xff0c;保证数据安全 ACID属性&#xff1a; A&#xff1a;原子性&#xff08;Atomicity&#xff09;&#xff1a;指事务是原子的&#xff0c;对事务中的操…

二分查找——704. 二分查找

文章目录 1. 题目2. 算法原理2.1 暴力解法2.2 二分查找 3. 代码实现 1. 题目 题目链接&#xff1a;704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索…

NX二次开发UF_CAM_ask_cutter_db_object 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;里海NX二次开发3000例专栏 UF_CAM_ask_cutter_db_object Defined in: uf_cam.h int UF_CAM_ask_cutter_db_object(UF_CAM_db_object_t * db_obj ) overview 概述 This function provides the database object which is curre…

深信服测开实习

感觉会有人对这种类型的博客感兴趣&#xff0c;所以想了想还是发上来了。 今天早上十点收到了通知&#xff0c;这周五报道。 大致说工作时长&#xff1a; 周一到周五 一二四 早上九点到中午十二点。两小时午休。下午两点到晚上六点半。一小时晚休。七点半到晚上八点半下班。三…

CompletableFuture.join() vs Future.get(),开发中哪个更好

CompletableFuture和Future都是Java中的接口&#xff0c;用于异步编程和并发处理。 Future表示一种异步计算的结果&#xff0c;可以通过get()方法获取计算结果或等待计算的完成。但是&#xff0c;如果计算还未完成&#xff0c;get()方法会阻塞线程&#xff0c;这会影响并发性能…

手写promis(1)

目录 前言 核心功能--构造函数 核心功能--状态及原因 then方法 成功和失败回调 异步及多次调用 异步任务--核心api Promise.then: queueMicrotask: MutationObserver: setImmediate: setTimeout: 异步任务---函数封装 前言 Promise&#xff08;承诺&#xff09;…

竞赛选题 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习行人重识别(person reid)系统 该项目…

KiCad源代码研究:KiCad是如何渲染和绘图的。

common.json文件中appearance.show_scrollbars common.json对应于代码的common_settings 1.EDA_DRAW_PANEL_GAL类 EDA_DRAW_PANEL_GAL类中定义了绘图的基本要素&#xff1a; /// Interface for drawing objects on a 2D-surfaceKIGFX::GAL* m_gal;/// Stores v…

如何在公网环境下使用笔记本的Potplayer访问本地群晖webdav中的影视资源

文章目录 如何在公网环境下使用笔记本的Potplayer访问本地群晖webdav中的影视资源**那么问题来了&#xff0c;potplayer只能局域网内访问资源&#xff0c;那我不在家中怎么看本地电影&#xff1f;** 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果…

目标检测 Faster RCNN全面解读复现

Faster RCNN 解读 经过R-CNN和Fast RCNN的积淀&#xff0c;Ross B. Girshick在2016年提出了新的Faster RCNN&#xff0c;在结构上&#xff0c;Faster RCNN已经将特征抽取(feature extraction)&#xff0c;proposal提取&#xff0c;bounding box regression(rect refine)&…

DGL创建异构图

利用DGL创建具有3种节点类型和3种边类型的异构图 graph_data {# (src_type, edge_type, dst_type)(drug, interacts, drug): (th.tensor([0, 1]), th.tensor([1, 2])),(drug, interacts,, disease): (th.tensor([1]), th.tensor([2])) }g dgl.heterograph(graph_data)上述代…

110.firefly-overlayroot

折腾rk3399的开发板的时候&#xff0c;突然发现overlayroot这个词汇。 我移植一下linux5.10的内核到firefly3399开发板&#xff0c;结果启动之后文件系统提示只读&#xff01;&#xff01;&#xff01; 这就让我很莫名。后来看到mount文件系统的情况&#xff0c;感觉也是不可…

集成多元算法,打造高效字面文本相似度计算与匹配搜索解决方案,助力文本匹配冷启动[BM25、词向量、SimHash、Tfidf、SequenceMatcher]

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

图解算法数据结构-LeetBook-栈和队列03_验证栈的取出顺序

现在图书馆有一堆图书需要放入书架&#xff0c;并且图书馆的书架是一种特殊的数据结构&#xff0c;只能按照 一定 的顺序 放入 和 拿取 书籍。 给定一个表示图书放入顺序的整数序列 putIn&#xff0c;请判断序列 takeOut 是否为按照正确的顺序拿取书籍的操作序列。你可以假设放…

万宾科技智能井盖传感器,预防城市道路安全

随着城市交通的不断发展和城市化进程的加速推进&#xff0c;城市道路安全问题日益凸显。市政井盖作为城市道路的一部分&#xff0c;承担着重要的交通安全保障职责。然而传统的市政井盖管理方式存在许多不足。针对这些问题政府需要采取适当的措施&#xff0c;补足传统管理方式的…