lambda 表达式不解析 json,需先用 json 库(如 jackson、fastjson)将字符串转为 list 或 pojo 列表,再用 stream + lambda 进行 filter、sorted、map 等操作,避免在 lambda 内重复解析以保证性能与安全。

Java 中 Lambda 表达式本身不直接解析 JSON,它需要配合 JSON 解析库(如 org.json、fastjson 或 Jackson)先把 JSON 字符串转成 Java 对象或集合,之后再用 Lambda + Stream API 做筛选、排序、映射等操作。关键在于“解析归解析,处理归处理”——Lambda 负责逻辑处理,不是解析入口。
先转成可流式处理的结构
JSON 字符串不能直接被 Stream 处理,必须先转为 List
- 用
org.json.JSONArray解析数组 → 遍历生成List<jsonobject></jsonobject> - 用
fastjson的JSON.parseArray(jsonStr, YourClass.class)直接转为对象列表 - 避免在 Lambda 表达式里重复解析:不要在
filter()或map()中反复调用new JSONObject(...),会显著拖慢性能
按字段值过滤(filter)
假设已有一个 List<jsonobject></jsonobject>,想筛选 age 大于 25 的记录:
list.stream().filter(obj -> obj.optInt("age", 0) > 25).collect(Collectors.toList())- 注意使用
optInt()/optString()而非getInt(),避免空值抛JSONException - 多个条件可用
&&或||组合,比如obj.optBoolean("active") && obj.optString("status").equals("OK")
按字段排序(sorted)
对 JSON 对象列表按某个键排序,推荐用 Comparator.comparing() 配合 Lambda:
- 升序:
list.stream().sorted(Comparator.comparing(obj -> obj.optInt("score", 0))).collect(Collectors.toList()) - 降序:
list.stream().sorted(Comparator.comparing(obj -> obj.optInt("score", 0)).reversed()) - 字符串字段注意空安全:
Comparator.comparing(obj -> obj.optString("name", ""))
提取字段或转换结构(map)
从 JSON 对象中批量提取某字段,或组装新结构:
- 只取 name 列表:
list.stream().map(obj -> obj.optString("name")).collect(Collectors.toList()) - 转为 Map
: list.stream().collect(Collectors.toMap(obj -> obj.optString("id"), obj -> obj.optString("name"))) - 构造新对象(需先有对应类):
list.stream().map(obj -> new User(obj.optString("name"), obj.optInt("age"))).collect(Collectors.toList())
真正解析 JSON 还得靠库,Lambda 是让后续操作更简洁有力的工具。用对时机,代码就干净;用错位置(比如硬塞解析逻辑进 Lambda),反而增加出错和维护成本。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











