接口返回一串商品数据,包裹在方括号里,同事取了第一个就写死下标,第二天后端多推了两个字段,页面上全乱。这种结构老老实实遍历最稳,别图省事只取固定位置。
先分清它和普通列表的不同
这种数组是库里的对象类型,里面装的是通用元素,可能是数字、字符串、对象或嵌套数组。取元素统一返回通用类型,要按预期类型再取一次,比如取字符串、取整数、取对象。不确定类型直接强转容易抛类型不匹配异常,先判断元素类型再取更保险。
三种常用遍历写法对比
传统计数循环适合需要下标的场景,比如拼序号。增强循环代码最清爽,只关心元素时首选。流式写法配合过滤和映射,能一行筛出满足条件的元素,比如取价格大于100的商品再收集成新数组。外层是对象数组时,元素取对象后再按字段名取具体值,一层层剥开就行,别想一步到位。
嵌套与空值这两处最费时间
对象里又有数组时,遍历外层每个对象,再遍历内层数组,用两层循环即可,记得内层取出来先判空。字段可能不存在,取之前先判断是否包含该键,否则取出来是空,后面参与运算就报错。数组整体为空时循环一次不跑,但要处理空数组分支,避免页面显示空白无提示。
性能与写法小建议
大数组遍历时不要在循环里反复取长度或建对象,长度拿到循环外一次即可。处理完想转成字符串发回去,直接调用输出方法就行。多层嵌套又只需少量字段时,先取出所需字段放临时变量,再拼装结果,能少很多重复取值。遍历中要修改原数组,先另存一份副本再改,边遍历边删会漏元素。
- 取元素先判类型:不确定就按类型取,别硬转
- 选型:要下标用计数循环,要过滤用流式写法
- 避坑:先判是否含键再取值,嵌套结构先内层判空
for(int i=0;i小于数组长度;i递增) 取(i)for(元素 : 数组) 处理(元素)数组.stream().filter(过滤).collect(收集)对象.get(字段名) 前先 containsKey 判断嵌套数组先取内层判空再遍历