lambda、function基础/响应式编程基础

lambda表达式

  • 只要是函数式接口(接口内只有一个未实现的方法,可以有其它默认方法),就可以用lambda表达式,也就是快速new一个匿名内部类。

  • 实例化接口的三种方式

    1. 继承接口,并实现接口

    2. 直接实现匿名内部类

    3. 通过lambda表达式去实现匿名内部类

      package org.khaoden.lambda;interface animal {void sound();default void eat() {System.out.println("Eating");};
      }interface cat {void sound();default void eat() {System.out.println("Eating1");}
      }class Dog implements animal {public void sound() {System.out.println("Barking");}
      }public class Lambda {public static void main(String[] args) {Dog d = new Dog();d.sound();System.out.println("~~~~~~~~~~~~~~~~~");animal c = new animal() {@Overridepublic void sound() {System.out.println("Meow");}};c.sound();System.out.println("~~~~~~~~~~~~~~~~~");animal a = () -> {System.out.println("Woof");};a.sound();a.eat();System.out.println("~~~~~~~~~~~~~~~~~");}
      }
      
  • lambda表达式的匹配方式

    1. 如果没有参数类型,是通过函数的参数数量来匹配的,按照顺序匹配
    2. 如果有参数类型,就加上类型的匹配
例子
  • 比较器的lambda写法

    package org.khaoden.lambda;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;class Student {String name;Integer grade;public Student(String name, int grade) {this.name = name;this.grade = grade;}
    }public class example {public static void main(String[] args) {List<Student> list = new ArrayList<>();list.add(new Student("khaoden", 10));list.add(new Student("khaoden1", 9));list.add(new Student("khaoden2", 8));printListVal(list);//        Collections.sort(list, new Comparator<Student>() {
    //            @Override
    //            public int compare(Student o1, Student o2) {
    //                return o1.grade.compareTo(o2.grade);
    //            }
    //        });// lambda表达式
    //        Collections.sort(list, (o1, o2) -> o1.grade.compareTo(o2.grade));// 方法引用,必须是传入的值就是比较的,且一定是升序的
    //        Collections.sort(list, Integer::compareTo); // 每次拿一个值去比较,list的元素类型就是比较器方法的擦参数类型// 对于有对应静态方法的可以直接使用Collections.sort(list, Comparator.comparingInt(o -> o.grade));printListVal(list);Runnable runnable = () -> System.out.println("hello world");runnable.run();Thread t = new Thread(() -> System.out.println("hello world from thread"));System.out.println("hello world1");t.start();}private static void printListVal(List<Student> list) {for (Student student : list) {System.out.println(student.name + " " + student.grade);}}
    }
    
  • 使用注意

    • lambda表达式本质就是对方法的快速实现,如果对应的类型有现成的方法,可以使用方法引用去调用。
    • 方法引用不需要传递参数,直接把值传入比较即可。如果比较的是对应对象的属性,可以使用Comparator的静态方法,比如Integer是comparingInt(x -> x.val)
    • lambda表达式的变量类型必须是接口,因为是用来匿名内部类的,写一个类完全没有意义,而且也没有接口继承类的。

Function

  • java提供了一系列的函数时接口

  • 类型分别

    1. 消费者 accept

    2. 生产者 get

    3. 多功能函数 apply

    4. 普通函数

      import java.util.function.BiFunction;
      import java.util.function.Consumer;
      import java.util.function.Function;
      import java.util.function.Supplier;public class Func {public static void main(String[] args) {// 消费者Consumer<String> consumer = (t) -> {System.out.println(t);};// 提供者Supplier<String> supplier = () -> {return "hello world";};// 普通函数Runnable runnable = () -> {System.out.println("hello world");};// 多功能函数Function<String, String> function = (t) -> {return t;};// 多参数功能函数BiFunction<String, String, String> biFunction = (t, u) -> {return t + u;};System.out.println(function.apply("hello world"));System.out.println(biFunction.apply("hello", " world"));System.out.println(supplier.get());consumer.accept("hello world");}
      }
      
  • 常用接口

    1. 断言Predicate:返回值是boolean,根据传来的参数去判断

      // 断言
      Predicate<Integer> predicate = t -> t % 2 == 0;
      System.out.println(predicate.test(2)); // 正向判断
      System.out.println(predicate.negate().test(2)); // 反向判断
      
  • 实例

    import java.util.function.Consumer;
    import java.util.function.Function;
    import java.util.function.Predicate;
    import java.util.function.Supplier;public class FuncDEMO {public static void main(String[] args) {// 定义数字提供函数Supplier<String> supplier = () -> "42";// 定义偶数断言Predicate<Integer> predicate = (t) -> t % 2 == 0;// 转换器,字符串转数字Function<String, Integer> func = Integer::parseInt;// 消费者,打印数字Consumer<Integer> consumer = System.out::println;Myfunc(predicate, func, supplier, consumer);Myfunc((t) -> t % 2 == 0, Integer::parseInt, () -> "43", System.out::println);}private static void Myfunc(Predicate<Integer> predicate, Function<String, Integer> func, Supplier<String> supplier, Consumer<Integer> consumer) {if (predicate.test(func.apply(supplier.get()))) {consumer.accept(func.apply(supplier.get()));} else {System.out.println("不是偶数");}}
    }
    • 简单示例,是函数式接口常用场景

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

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

相关文章

OpenTiny 体验官实操活动 | 快速体验 TinyVue 组件库的智能化交互能力

实验简介 通过体验基于标准 MCP 协议的 Web 智能组件库——TinyVue&#xff0c;开发者可以了解 AI 智能体控制 TinyVue 智能组件的各类行为。本次实验主要是在 TinyVue 官网上&#xff0c;开发者能够通过 AI 对话框&#xff0c;以语音或文字方式与网站组件进行互动&#xff0c…

秋招Day15 - Redis - 基础

什么是Redis&#xff1f; Redis是一种基于键值对的NoSQL数据库。 主要的特点是把数据放在内存中&#xff0c;读写速度相比于磁盘会快很多。 对于性能要求很高的场景&#xff0c;比如缓存热点数据&#xff0c;防止接口爆刷&#xff0c;都会用到Redis Redis还支持持久化&…

权限提升-工作流

一、Windows 权限提升 操作阶段 对应工具 说明 系统补丁与漏洞查询 systeminfo、WindowsVulnScan、wesng 提取 KB 补丁号&#xff0c;匹配 CVE 漏洞&#xff08;如 CVE-2020-1054&#xff09; 内核漏洞提权 MSF&#xff08;local_exploit_suggester&#xff09;、CVE 对…

c++手撕线程池

C手撕线程池 #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h>#define LL_ADD(item, list) do{ \item->prev NULL; \item->next list; \if…

cocos creator 3.8 - 精品源码 - 六边形消消乐(六边形叠叠乐、六边形堆叠战士)

cocos creator 3.8 - 精品源码 - 六边形消消乐 游戏介绍功能介绍免费体验下载开发环境游戏截图免费体验 游戏介绍 六边形堆叠战士(六边形消消消)是一款脱胎于2048、1010&#xff0c;基于俄罗斯方块的魔性方块达人小游戏&#xff0c;可以多方向多造型消除哦&#xff01; 功能介…

3ds Max高效运行配置核心要素

要保障3ds Max流畅运行&#xff0c;需围绕计算性能、图形处理、数据吞吐三大维度构建硬件体系。不同工作环节对硬件需求存在显著差异&#xff1a; 一、核心组件配置原则 CPU&#xff1a;线程与频率双优化 建模/视口操作&#xff1a;依赖高主频&#xff08;建议≥4.0GHz&#…

实变与泛函题解-心得笔记【16】

文章目录 集合参考文献 集合 参考文献 《实变函数论与泛函分析》

道路交通标志检测数据集-智能地图与导航 交通监控与执法 智慧城市交通管理-2,000 张图像

道路交通标志检测数据集 &#x1f4e6; 已发布目标检测数据集合集&#xff08;持续更新&#xff09;&#x1f6a7; 道路交通标志检测数据集介绍&#x1f4cc; 数据集概览包含类别 &#x1f3af; 应用场景&#x1f5bc; 数据样本展示 YOLOv8 训练实战&#x1f4e6; 1. 环境配置 …

一、jenkins介绍和gitlab部署

一、jenkins介绍 jenkins和持续集成的关系 Jenkins 是实现持续集成&#xff08;CI&#xff09;最流行的自动化工具&#xff0c;它负责自动构建、测试和部署代码&#xff0c;确保团队能频繁且可靠地集成代码变更。 持续集成和敏捷开发的关系 敏捷开发是一种"快速迭代、…

k3s or kubesphere helm安装报错dial tcp 127.0.0.1:8080: connect: connection refused

在安装kubesphere时报错 Error: Kubernetes cluster unreachable: Get "http://localhost:8080/version": dial tcp 127.0.0.1:8080: connect: connection refused helm.go:92: 2025-06-27 15:14:43.30908177 0000 UTC m0.033127135 [debug] Get "http://localh…

使用datafusion和tpchgen-rs进行完整的TPCH 22个查询的基准测试

1.从源码编译bench二进制文件。 下载datafusion源码, 解压到目录&#xff0c;比如/par/dafu&#xff0c; cd /par/dafu/benchmarks export CARGO_INCREMENTAL1 export PATH/par:/par/mold240/bin:$PATH因为mold默认使用并行编译&#xff0c;而这些二进制文件很大&#xff0c;如…

【软考高项论文】论信息系统项目的干系人管理

摘要 在信息系统项目管理里&#xff0c;干系人管理极为关键&#xff0c;它不仅决定项目成败&#xff0c;还对项目进度、质量和成本有着直接影响。本文结合作者2024年6月参与管理的信息系统项目&#xff0c;详细阐述了项目干系人管理的过程&#xff0c;分析了干系人管理与沟通管…

PB应用变为Rust语言方案

从PB(PowerBuilder)迁移到现代开发软件 PowerBuilder(PB)作为早期的快速应用开发工具,曾广泛应用于企业级数据库应用开发。随着技术发展,PB逐渐面临以下挑战,促使企业转向现代开发工具: 技术陈旧与维护困难 PB的架构基于较老的客户端-服务器模式,难以适应云原生、微…

【大模型】Query 改写常见Prompt 模板

下面对常见的几种“Query 改写”Prompt 模板进行中英文对照&#xff0c;并在注释中给出中文说明&#xff0c;帮助中国用户快速理解与使用。 根据调研&#xff0c;企业级 Query 改写模块需要覆盖多种常见场景&#xff0c;包括拼写纠错、中英混合、省略上下文、多义词扩展、专业术…

西门子S7-200 SMART PLC:小型自动化领域的高效之选

在工业自动化领域&#xff0c;小型PLC作为设备控制的核心组件&#xff0c;其性能、灵活性和性价比始终是用户关注的重点。西门子推出的S7-200 SMART可编程控制器&#xff0c;凭借对中国市场需求的精准把握&#xff0c;成为了小型自动化解决方案的标杆产品。本文将从产品亮点、技…

使用iperf3测试网络的方法

深入掌握网络性能测试&#xff1a;iperf3全指南 在网络优化、故障排查和带宽验证中&#xff0c;iperf 是工程师必备的利器。这款开源工具通过模拟数据流&#xff0c;精准测量​​带宽、抖动、丢包率​​等核心指标。本文将结合实战经验&#xff0c;详解iperf的安装、参数配置和…

Level2.11继承

一、继承 #动物# #老虎、狮子、大象 #动物有共性 ##定义一个动物&#xff1a;1.有4条腿&#xff1b;2.陆地上跑&#xff1b;3.需要进食&#xff08;属性能力&#xff09; ##猫&#xff1a;同上&#xff08;继承了动物的属性和能力&#xff09; ##老鼠&#xff1a;同上#Python…

Class3Softmax回归

Class3Softmax回归 回归VS分类 回归是估计一个连续值 分类是预测一个离散类别 回归分类单连续值输出通常为多个输出自然区间R输出i是预测为第i类的置信度跟真实值的区别作为损失 生活中的分类问题 1.垃圾分类 类别&#xff1a; 可回收物 湿垃圾&#xff08;厨余垃圾&#xff0…

day042-负载均衡与web集群搭建

文章目录 0. 老男孩思想-面试官问&#xff1a;你对加班的看法?1. 负载均衡2. 搭建负载均衡的WordPress集群2.1 负载均衡服务器2.2 配置web服务器2.3 测试 踩坑记录1. /var/cache/nginx权限问题 0. 老男孩思想-面试官问&#xff1a;你对加班的看法? 互联网公司没有不加班的&a…

40岁技术人用AI寻找突破路线

年近40&#xff0c;坐标重庆&#xff0c;从事医疗器械行业多年&#xff0c;遇到发展瓶颈。刚好遇到AI技术浪潮。最近一年在不断尝试把AI应用于工作生活的方方面面。 总结一下我是如何利用AI来做职业规划的&#xff1a; 整理好自己的简历&#xff0c;越详细越好。这个可以利用…