当前位置: 首页 > news >正文

Java--json与map,colloct与流

一、流

List<TivsmInstInfo> tivsmInstInfoList = tivsmInstInfoService.list() // 1. 获取所有数据.stream()                         // 2. 转为流.filter(info ->                   // 3. 过滤条件new BigDecimal("5").compareTo(info.getInstStat()) == 0 // 使用 compareTo 正确比较).collect(Collectors.toList());    // 4. 收集为List
1. 获取数据源:tivsmInstInfoService.list()

返回值:通常返回一个 List<TivsmInstInfo> 类型的集合,我们称之为数据源的起点。假设这个列表包含N个对象。

2. 创建流:.stream()

作用:将上一步得到的 List<TivsmInstInfo> 集合转换为一个 Stream<TivsmInstInfo>(流)。

3. 过滤数据:.filter(...)
//原来的代码 
.filter(TivsmInstInfo -> TivsmInstInfo.getInstStat() == new BigDecimal(5))
  • 参数:Lambda表达式 TivsmInstInfo -> TivsmInstInfo.getInstStat() == new BigDecimal(5)

    • TivsmInstInfo:是流中每个元素的代表(你可以任意命名,如 iteminfo)。

    • ->:箭头符号,将参数列表和表达式主体分开。

    • TivsmInstInfo.getInstStat() == new BigDecimal(5):这是过滤的条件

      • 它获取每个 TivsmInstInfo 对象的 instStat 属性(其类型显然是 BigDecimal)。

      • 然后判断它是否等于新创建的 BigDecimal(5)

这是最核心的筛选步骤。

⚠️ 重要问题:这里的写法有一个潜在的Bug!
使用 == 比较 BigDecimal 是错误的。== 比较的是对象的内存地址,而不是它们的数值。两个内容都是5的 BigDecimal 对象,如果用 == 比较,可能会返回 false
正确写法应使用 equals() 或 compareTo()

.filter(info -> info.getInstStat().compareTo(new BigDecimal(5)) == 0)
// 或者
.filter(info -> new BigDecimal(5).equals(info.getInstStat()))
4. 收集结果:.collect(Collectors.toList())

作用:这是一个终止操作。它负责将经过前面过滤操作后的 Stream<TivsmInstInfo> 收集起来,转换回我们熟悉的 List<TivsmInstInfo> 集合。

二、JSON和JSONObject区别

JSON 类(工具类)

JSON 是一个静态工具类,主要用于转换操作

1. JSON.parseArray() - 将JSON字符串转换为List

// 将JSON数组字符串转换为对象列表
List<InstInfoVO> payload = JSON.parseArray(exchange.getBody().getPayload().toJSONString(), // JSON字符串InstInfoVO.class                                // 目标类类型
);

2. JSON.parseObject() - 将JSON字符串转换为对象

// 将JSON字符串转换为单个对象
InstInfoVO info = JSON.parseObject(jsonString, InstInfoVO.class);// 或者转换为JSONObject
JSONObject jsonObject = JSON.parseObject(jsonString);

3. JSON.toJSONString() - 将对象转换为JSON字符串

// 将对象转换为JSON字符串
String jsonStr = JSON.toJSONString(object);// 带格式化
String prettyJson = JSON.toJSONString(object, SerializerFeature.PrettyFormat);

JSONObject 类(对象类)

JSONObject 是一个可以操作的具体对象,继承自 HashMap<String, Object>

1. 创建和操作JSONObject

// 创建JSONObject
JSONObject jsonObj = new JSONObject();// 添加属性
jsonObj.put("name", "张三");
jsonObj.put("age", 25);
jsonObj.put("isStudent", false);// 获取属性
String name = jsonObj.getString("name");
int age = jsonObj.getInteger("age");

2. 转换为字符串

// 转换为JSON字符串
String jsonString = jsonObj.toJSONString();// 在您的代码中
log.info("发送账户余额消息,入参:{}", JSONObject.toJSONString(paramMap));
// 这里其实应该用 JSON.toJSONString(paramMap),但JSONObject.toJSONString()也可以

代码解释

List<InstInfoVO> payload = JSON.parseArray(exchange.getBody().getPayload().toJSONString(), // 1. 先将payload转为JSON字符串InstInfoVO.class                                // 2. 再解析为InstInfoVO列表
);log.info("发送账户余额消息,入参:{}", JSONObject.toJSONString(paramMap)               // 将Map转换为JSON字符串用于日志输出
);

常用方法对比

操作JSON (工具类)JSONObject (对象)
字符串→对象parseObject()parseObject()
字符串→列表parseArray()不支持
对象→字符串toJSONString()toJSONString()
操作属性不支持put()get()


文章转载自:

http://WbuodnA7.fcwxs.cn
http://pNG6Gu3G.fcwxs.cn
http://0SaC6PSP.fcwxs.cn
http://0kXV3dOl.fcwxs.cn
http://fsbf1o9Z.fcwxs.cn
http://mUpwmN2W.fcwxs.cn
http://b0YOPuEL.fcwxs.cn
http://eB8CyxvS.fcwxs.cn
http://77mql5M1.fcwxs.cn
http://t5xtszao.fcwxs.cn
http://SMFThZ7j.fcwxs.cn
http://8gUP35fH.fcwxs.cn
http://cTVkuxXU.fcwxs.cn
http://kZNxrv9X.fcwxs.cn
http://ij3Rv4OL.fcwxs.cn
http://5o4Hxugq.fcwxs.cn
http://LGDdMvMp.fcwxs.cn
http://2VmJi5Ax.fcwxs.cn
http://dxd4zlPJ.fcwxs.cn
http://kE4oMX6Q.fcwxs.cn
http://1UNq0c9Q.fcwxs.cn
http://A9M7ggHG.fcwxs.cn
http://kO4wlfII.fcwxs.cn
http://iN8xMqLV.fcwxs.cn
http://GottU4le.fcwxs.cn
http://57A7Qiz4.fcwxs.cn
http://jrmB2ifo.fcwxs.cn
http://rlqqZHjh.fcwxs.cn
http://jNTRvZWX.fcwxs.cn
http://MwwEzyPb.fcwxs.cn
http://www.dtcms.com/a/365038.html

相关文章:

  • SpringMVC的请求接收与结果响应
  • Python爬取nc数据
  • 数据科学家如何更好地展示自己的能力
  • 理解sed命令
  • 干货知识:ERP、CRM、OA,小公司到底先上哪个?
  • 从 0 到 1 实现 PyTorch 食物图像分类:核心知识点与完整实
  • k8s知识点总结3
  • 基于 CC-Link IE FB 转 DeviceNet 技术的三菱 PLC 与发那科机器人在汽车涂装线的精准喷涂联动
  • Grafana Loki日志聚合系统深度解析:选型、竞品、成本与资源消耗
  • 安卓9.0系统修改定制化____如何修改安卓低版本固件 解决 API/SDK 版本过低的问题
  • 题解:UVA1589 象棋 Xiangqi
  • 根据fullcalendar实现企业微信的拖动式预约会议
  • 别错过!一杯奶茶钱开启企业微信 Power BI 之旅
  • gitlab推送失败,内存不足的处理
  • iOS蓝牙使用及深入剖析高频高负载传输丢包解决方案(附源码)
  • 【STL】C++ 开发者必学字符类详解析:std::string
  • 【人工智能学习之MMdeploy部署踩坑总结】
  • Linux之shell-awk命令详解
  • Ai Qwen3解答epochs多少为最佳 仅共参考
  • AI时代:智能体系统构建基本范式
  • 峰谷套利+动态增容:工商业储能能量管理系统的妙用
  • Docker容器与镜像:两种导入导出方式全解析
  • 洛谷 P3128 [USACO15DEC] Max Flow P -普及+/提高
  • 企业实用——MySQL的备份详解
  • Airsim 笔记:Python API 总结
  • 部署jenkins并基于ansible部署Discuz应用
  • 【ASP.NET Core】基于MailKit(SMTP 协议)实现邮件发送
  • Hadoop HDFS-SecondaryNameNode(2nn)详细介绍
  • 趣味学RUST基础篇(泛型)
  • OpenCL 中 内存对象完全详解和实战示例