【webFlux】zipWithIterable()判断是否有空值以及未与iterable 匹配时设置默认值

news/2024/5/3 20:41:28 标签: java, webFlux, zipWithIterable

判断是否有空值

在使用zipWithIterable()方法时,如果Iterable集合为空,那么zipWithIterable()方法会返回一个空的Flux流。如果Flux流为空,那么zipWithIterable()方法也会返回一个空的Flux流。

如果Iterable集合中有null元素,那么在zipWithIterable()方法中会将null元素与Flux流中的元素进行配对,并将null元素作为Iterable集合的元素返回。如果Flux流中有null元素,那么在zipWithIterable()方法中会将null元素与Iterable集合中的元素进行配对,并将null元素作为Flux流的元素返回。

为了避免在zipWithIterable()方法中出现NullPointerException异常,可以在调用zipWithIterable()方法之前先对Iterable集合进行判断,如下所示:

java">Iterable<String> iterable = ...; // 可能为空的Iterable集合
Flux<Integer> flux = ...; // 可能为空的Flux流

if (iterable != null && flux != null) {
    flux.zipWithIterable(iterable)
        .subscribe(tuple -> {
            Integer fluxElement = tuple.getT1(); // 获取Flux流中的元素
            String iterableElement = tuple.getT2(); // 获取Iterable集合中的元素
            // 处理Flux流和Iterable集合中的元素
        });
}

在这个示例代码中,先对Iterable集合和Flux流进行了非空判断,避免了在zipWithIterable()方法中出现NullPointerException异常的情况。另外,在subscribe()方法的回调函数中也可以对Flux流和Iterable集合中的元素进行空值判断。


未与iterable 匹配时增加默认值

在使用zipWithIterable()方法时,如果Iterable集合中的元素与Flux流中的元素不一一对应,那么会出现一个集合元素配对多个Flux元素或者一个Flux元素配对多个集合元素的情况。此时可以为未配对的元素设置一个默认值,以避免出现异常或者不符合预期的行为。

假设有一个Flux流和一个Iterable集合,它们的元素个数不相同,我们可以使用zipWithIterable()方法为未配对的元素设置默认值,如下所示:

java">Flux<Integer> flux = Flux.just(1, 2, 3, 4, 5);
Iterable<String> iterable = Arrays.asList("A", "B", "C");

flux.zipWithIterable(iterable, -1) // 为未配对的元素设置默认值-1
    .subscribe(tuple -> {
        Integer fluxElement = tuple.getT1(); // 获取Flux流中的元素
        String iterableElement = tuple.getT2(); // 获取Iterable集合中的元素或默认值
        // 处理Flux流和Iterable集合中的元素
    });

在这个示例代码中,zipWithIterable()方法的第三个参数是为未配对的元素设置的默认值,这里设置为-1。如果Iterable集合中的元素个数少于Flux流中的元素个数,那么未配对的Flux元素将使用默认值-1。如果Flux流中的元素个数少于Iterable集合中的元素个数,那么未配对的Iterable元素将被忽略。

在subscribe()方法的回调函数中,需要通过getT2OrDefault()方法获取Iterable集合中的元素或默认值。这个方法的作用是获取Iterable集合中的元素,如果元素不存在,则返回默认值。如果Iterable集合中的元素为null,则该方法也会返回默认值。

另外,也可以使用zipWith()方法为未配对的元素设置默认值,这个方法与zipWithIterable()方法的用法类似。


匹配报错时增加一个默认的Tuples

在使用zipWithIterable()方法时,如果Iterable集合中的元素与Flux流中的元素不一一对应,那么会出现一个集合元素配对多个Flux元素或者一个Flux元素配对多个集合元素的情况。此时可以为未配对的元素设置一个默认值,以避免出现异常或者不符合预期的行为。另外,如果在zipWithIterable()方法中出现异常,可以使用onErrorReturn()方法返回一个Tuple2对象,以便在异常处理中继续进行操作。

假设有一个Flux流和一个Iterable集合,它们的元素个数不相同,我们可以使用zipWithIterable()方法为未配对的元素设置默认值,并在出现异常时返回一个Tuple2对象,如下所示:

java">Flux<Integer> flux = Flux.just(1, 2, 3, 4, 5);
Iterable<String> iterable = Arrays.asList("A", "B", "C");

flux.zipWithIterable(iterable, -1) // 为未配对的元素设置默认值-1
    .onErrorReturn(Tuples.of(-1, "")) // 在出现异常时返回一个Tuple2对象
    .subscribe(tuple -> {
        Integer fluxElement = tuple.getT1(); // 获取Flux流中的元素
        String iterableElement = tuple.getT2(); // 获取Iterable集合中的元素或默认值
        // 处理Flux流和Iterable集合中的元素
    });

在这个示例代码中,使用onErrorReturn()方法返回一个Tuple2对象,在出现异常时可以继续进行操作。Tuple2是一个二元组对象,包含两个元素,分别是Flux流中的元素和Iterable集合中的元素或默认值。如果出现异常,那么Tuple2对象的元素将会是onErrorReturn()方法中指定的元素。这里我们设置Tuple2对象的元素为-1和空字符串""。

在subscribe()方法的回调函数中,需要通过getT2()方法获取Iterable集合中的元素或默认值。如果出现异常,那么getT1()方法和getT2()方法将会返回onErrorReturn()方法中指定的元素。需要注意的是,如果在zipWithIterable()方法中出现异常,那么默认值和onErrorReturn()方法中指定的元素是相同的。


http://www.niftyadmin.cn/n/409366.html

相关文章

C++基础(三) —— STL组件

文章目录 一、C STL standard template libaray 标准模板库 1.顺序容器 vector&#xff1a; 底层数据结构&#xff1a;动态开辟的数组 扩容方式&#xff1a;每次以原来空间大小的2倍进行扩容 具体过程&#xff1a; 当需要在 std::vector 中插入元素时&#xff0c;如果当前容量…

网络通信 --- HTTP 协议初识

目录 &#x1f332;一、HTTP 协议是什么 &#x1f333;二、HTTP协议格式 &#x1f9aa;1.抓包工具的使用(以 Fiddler 为例) &#x1f363;2. 抓包工具的原理 (以 Fiddler 为例) &#x1f364;3. 抓包结果 &#x1f365;① HTTP 请求(request) &#x1f96e;②HTTP响应(re…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第20套

少儿编程 蓝桥杯青少组科技素养题真题及解析第20套 1、“唐纳德特朗普 (Donald Trump) 曾经是美国总统”是一个 (),“特朗普关于新冠肺炎疫情的不实言论”是一个 ()。 A、事实;事实 B、观点;事实 C、观点;观点 D、事实;观点 答案:D 考点分析:主要考查小朋友们对时事的…

模板方法设计模式的学习和使用

1、模板方法设计模式的学习 当涉及到一系列具有相似行为的算法或操作时,模板方法设计模式是一种有效的设计模式。它允许你定义一个算法的骨架,同时将某些步骤的实现细节交给子类来实现。   模板方法模式基于以下两个核心原则&#xff1a; 抽象类定义模板方法骨架&#xff1a…

chatgpt赋能python:Python屏幕截图:完美的方法记录你的屏幕

Python屏幕截图&#xff1a;完美的方法记录你的屏幕 Python作为一种高级编程语言&#xff0c;被广泛用于开发各种应用程序和游戏&#xff0c;其中之一就是屏幕截图。 在本文中&#xff0c;我们将介绍使用Python进行屏幕截图的方法和技巧。 什么是屏幕截图&#xff1f; 屏幕截…

宝塔反代教程+国内服务器访问openai api接口+502 Bad Gateway问题解决!

前言 宝塔反代教程国内服务器访问openai api接口502 Bad Gateway问题解决! 此方法最简单快捷&#xff0c;没有复杂步骤&#xff0c;不容易出错&#xff0c;即最简单&#xff0c;零代码、零部署的方法。 实现前提 一台海外VPSOpenAI官方的API_KEYChatGPT网站系统源码 ChatGP…

STL——string模拟实现(一)

目录 构造函数的实现 拷贝构造 赋值重载 const问题 迭代器打印 范围for打印 运算符重载 reserve模拟 插入数据 push_back append 构造函数的实现 先贴出一段错误代码&#xff1a; #include<iostream> #include<assert.h> namespace zzl//避免与库冲突 {…

某电机修造厂变电所一次系统设计

摘要 由于国内人民生活水平的提高&#xff0c;科技不断地进步&#xff0c;控制不断地完善&#xff0c;从而促使变电所设计技术在电气系统领域占据主导权&#xff0c;也使得110kV变电所被广泛应用。在变电所系统设计领域中&#xff0c;110kV变电所成为目前一处亮丽的风景线&…