【webflux】判断List<T>对象的多个元素的特定属性是否有多个特定值,并返回Tuples,Tuples为多个特定值的存在情况

news/2025/2/12 8:49:22/

在 WebFlux 中,我们可以使用 Flux 来判断一个 List 中的 Bean 对象的多个元素的特定属性是否有两个值中任意一个,并将结果封装到 Tuples 中返回。Tuples 中包括是否有两个值的 boolean 值。具体步骤如下:

  1. 使用 Flux 对 List 中的每个 Bean 对象进行操作

    首先,我们需要使用 Flux 对 List 中的每个 Bean 对象进行操作。使用 Flux 的 fromIterable() 方法可以将 List 转换为 Flux。

    Flux.fromIterable(beanList)
    
  2. 对每个 Bean 对象进行判断

    对每个 Bean 对象进行判断,判断是否存在两个值中任意一个的元素。我们可以使用反射来获取 Bean 对象的属性列表,并遍历属性列表,判断特定属性是否有两个值中任意一个。

    .map(bean -> {Class<?> clazz = bean.getClass();Field[] fields = clazz.getDeclaredFields();List<Tuple2<String, String>> elementValues = new ArrayList<>();boolean hasTwoValues = false;for (Field field : fields) {if (field.getName().equals(elementName)) {field.setAccessible(true);Object value = field.get(bean);if (value != null && (value.toString().equals(elementValue1) || value.toString().equals(elementValue2))) {elementValues.add(Tuples.of(field.getName(), value.toString()));if (elementValues.size() == 2) {hasTwoValues = true;break;}}}}return Tuples.of(bean, hasTwoValues, elementValues);
    })
    

    在上述代码中,我们使用 map() 方法对每个 Bean 对象进行操作,并使用反射来判断特定属性是否有两个值中任意一个。如果存在两个值中任意一个的元素,则将 Bean 对象、是否有两个值的 boolean 值和元素名称、值封装到 Tuples 中返回,否则返回 null。

  3. 过滤掉值为 null 的 Tuples

    遍历完所有 Bean 对象后,我们可以使用 Flux 的 filter() 方法过滤掉值为 null 的 Tuples。

    .filter(tuple -> tuple != null)
    
  4. 返回结果

    最后,我们可以使用 Flux 的 collectList() 方法将所有符合条件的 Tuples 收集到 List 中,并返回该 List。

    .collectList()
    

完整代码如下:

public static Mono<List<Tuple3<?, Boolean, List<Tuple2<String, String>>>>> hasMultipleValues(List<?> beanList, String elementName, String elementValue1, String elementValue2) {return Flux.fromIterable(beanList).map(bean -> {Class<?> clazz = bean.getClass();Field[] fields = clazz.getDeclaredFields();List<Tuple2<String, String>> elementValues = new ArrayList<>();boolean hasTwoValues = false;for (Field field : fields) {if (field.getName().equals(elementName)) {field.setAccessible(true);Object value = field.get(bean);if (value != null && (value.toString().equals(elementValue1) || value.toString().equals(elementValue2))) {elementValues.add(Tuples.of(field.getName(), value.toString()));if (elementValues.size() == 2) {hasTwoValues = true;break;}}}}return Tuples.of(bean, hasTwoValues, elementValues);}).filter(tuple -> tuple != null).collectList();
}

通过上述步骤,即可使用 Flux 来判断一个 List 中的 Bean 对象的多个元素的特定属性是否有两个值中任意一个,并将结果封装到 Tuples 中返回。Tuples 中包括是否有两个值的 boolean 值。如果需要返回值为 Mono 类型的结果,可以将 collectList() 方法改为 collect() 方法。如果需要返回值为 Flux 类型的结果,可以去掉 collectList() 方法。


http://www.ppmy.cn/news/341111.html

相关文章

Camera(照相机)

Camera一般和SurfaceView一起使用&#xff0c;SurfaceView用来显示摄像头所捕获的影像。 通过findViewById得到SurfaceView对象。 SurfaceView surfaceView(SurfaceView)findViewById(R.id.surfaceView);SurfaceView一般不直接操作其对象&#xff0c;而是通过 SurfaceHolder ho…

工业相机和普通家用相机有哪些区别?

工业相机和普通家用相机有哪些区别? 工业相机和民用相机可能听起来没什么不同&#xff0c;但它们实际上是两个根本不同的相机。 1、工业相机性能强劲&#xff0c;稳定可靠&#xff0c;安装方便。相机结构紧凑&#xff0c;不易损坏。它具有很长的工作时间&#xff0c;可以在恶…

哪个牌子的投影仪质量好?哪个牌子的投影仪质量好

购买投影仪时&#xff0c;想知道哪个牌子的投影仪质量好&#xff1f;要投影仪质量好&#xff0c;那肯定就是要用时间久&#xff0c;质量好&#xff0c;价格还合适。那么选择投影仪是需要注意的&#xff0c;重点是投影仪的镜头材质&#xff0c;显示芯片&#xff0c;性价比高。 …

机器视觉工业相机与智能相机的区别

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 工业相机是机器视觉系统中的一个关键组件&#xff0c;其最本质的功能就是将光信号转变成高清工业相机为有序的电信号。选择合适的相机也是机器视觉系统设计中的重要环节…

[调用第三方接口收费如何优化减少消费 ]

目录 前言: 实现示例: 讲解: 前言: java语言调用第三方接口,我会把调用的记录做入库处理并设置缓存时间&#xff0c;在查询有效期内就查入库的数据&#xff0c;过了缓存时间就查询第三方接口 实现示例: public class ThirdPartyApi {public static String getData(String pa…

实时数仓建设第2问:怎样使用flink sql快速无脑统计当天下单各流程(已发货,确认收货等等)状态的订单数量

实时统计当天下单各流程状态(已支付待卖家发货&#xff0c;卖家通知物流揽收&#xff0c;待买家收货等等)中的订单数量。 订单表的binlog数据发送到kafka,flink从kafka接受消息进行指标统计。因为每笔订单的状态会发生变化&#xff0c;比如上午为【已支付待卖家发货】&#xff…

smart gesture安装失败_CAXA 2018软件下载和安装教程

有任何问题请咨询微信管理员:E2271116330 软件介绍:CAXA CAD电子图板2018是一款功能强大的CAD图纸编辑软件,软件内置各行业的编辑工具,可以针对机械设计、建筑领域、工程开发、产品开发等多个行业提供专业的图纸设计方案。 CAXA 2018软件64位下载地址: 链接:https://pan.…