码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 在java中使用Reactor 项目中的一个类Mono,用于表示异步单值操作


    Mono 是 Reactor 项目中的一个类,用于表示异步单值操作。Reactor 是一个响应式编程库,广泛应用于 Java 中的异步编程和非阻塞 I/O 操作。Mono 可以类比为一个可能(或将来)包含零个或一个值的异步计算结果。与 Flux(另一个 Reactor 类,表示多个值的异步流)不同,Mono 专注于单值或空结果的处理。下面详细讲解 Mono 的用法和常见操作。
    1. 创建 Mono

    • 使用 just
    Mono mono = Mono.just("Hello,world")
    

    just 方法用于创建一个包含指定数据的 Mono。

    *使用 empty

    Mono mono = Mono.empty()
    

    empty 方法用于创建一个不包含任何数据的 Mono。

    • 使用 fromCallable
    Mono mono = Mono.fromCallable(() -> {
        // 你的计算或方法调用
        return "Result";
    });
    

    fromCallable 方法允许你传入一个 Callable,它会在订阅时被调用并返回一个值。

    • 使用 create
    Mono mono = Mono.create(sink -> {
        // 你的异步计算逻辑
        sink.success("Result");
        // 或者在发生错误时调用
        // sink.error(new RuntimeException("Error"));
    });
    

    create 方法允许你使用一个回调来异步产生一个值或错误。
    2. 操作 Mono

    • map
    Mono mono = Mono.just("Hello")
                            .map(value -> value + ", World!");
    

    map 用于同步地转换 Mono 中包含的值。

    • flatMap
    Mono mono = Mono.just("Hello")
                            .flatMap(value -> Mono.just(value + ", World!"));
    

    flatMap 用于异步地转换 Mono 中包含的值,它返回一个新的 Mono。

    • filter
    Mono mono = Mono.just("Hello")
                            .filter(value -> value.length() > 3);
    
    

    filter 用于根据一个谓词函数对 Mono 中的值进行筛选,如果值不符合条件,将返回一个空的 Mono。

    • doOnNext
    Mono mono = Mono.just("Hello")
                            .doOnNext(value -> {
                                // 处理值
                                System.out.println("Value: " + value);
                            });
    
    

    doOnNext 用于在每次有值发出时执行一个回调操作。
    3. 订阅 Mono

    • subscribe
    Mono mono = Mono.just("Hello");
    mono.subscribe(value -> {
        System.out.println("Received: " + value);
    });
    
    

    subscribe 方法用于开始处理 Mono 并定义当有值发出时该如何处理。

    • 带错误处理的 subscribe
    mono.subscribe(
        value -> {
            System.out.println("Received: " + value);
        },
        error -> {
            System.err.println("Error: " + error);
        }
    );
    
    
    • 带完成处理的 subscribe
    mono.subscribe(
        value -> {
            System.out.println("Received: " + value);
        },
        error -> {
            System.err.println("Error: " + error);
        },
        () -> {
            System.out.println("Completed");
        }
    );
    
    

    4. 组合操作

    • then
    Mono result = Mono.just("Hello")
                            .then();
    result.subscribe(() -> {
        System.out.println("Completed");
    });
    
    

    then 方法用于在当前 Mono 完成后执行一个新的操作,而忽略当前 Mono 的值

    • zipWith
    Mono mono1 = Mono.just("Hello");
    Mono mono2 = Mono.just("World");
    
    Mono result = mono1.zipWith(mono2, (v1, v2) -> v1 + ", " + v2);
    result.subscribe(System.out::println);
    
    

    zipWith 用于组合两个 Mono 的值。

  • 相关阅读:
    一站式统一返回值封装、异常处理、异常错误码解决方案—最强的Sping Boot接口优雅响应处理器
    使用StanfordCoreNLP的句法树以及NLTK的Tree建立DGL的图数据结构
    java计算机毕业设计政府资源交易中心业务流程管理系统设计与实现源码+数据库+系统+部署+lw文档
    【Android面试八股文】性能优化相关面试题: 什么是内存抖动?什么是内存泄漏?
    Node.js | 基础完结、综合训练 —— 路由应用实战教程
    一文通透位置编码:从标准位置编码到旋转位置编码RoPE
    PHP包含读文件写文件
    Android Gradle三种自定义插件方式详解(含报错解决方案)
    docker学习2-基本指令
    【面试题】原型和原型链
  • 原文地址:https://blog.csdn.net/u012953777/article/details/139712851
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号