Java--json与map,colloct与流

一、流

java 复制代码
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:是流中每个元素的代表(你可以任意命名,如 item, info)。

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

    • 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()
相关推荐
腻害兔7 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说12 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane199412 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了13 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品13 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘13 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记14 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端