如何优化从ArrayList提取属性存入String数组并取值的冗余代码
优化方案
你的原有代码存在不必要的中间数组创建、多次无效循环的问题,可以根据实际业务场景选择对应优化方案:
场景1:仅需弹出Toast提示,无需保留三个属性的独立数组
直接遍历原始cartArrayList即可完成逻辑,完全砍掉中间数组和多次循环,代码如下:
// 注意将CartItem替换为你自己的实体类类名 for (CartItem item : cartArrayList) { Toast.makeText(getContext(), item.getName(), Toast.LENGTH_SHORT).show(); Toast.makeText(getContext(), item.getColor(), Toast.LENGTH_SHORT).show(); Toast.makeText(getContext(), item.getNumber(), Toast.LENGTH_SHORT).show(); }
场景2:确实需要单独获取三个String数组供后续业务使用
可以用Java Stream API简化数组提取逻辑,无需手动维护下标赋值:
String[] nameArray = cartArrayList.stream().map(CartItem::getName).toArray(String[]::new); String[] colorArray = cartArrayList.stream().map(CartItem::getColor).toArray(String[]::new); String[] numArray = cartArrayList.stream().map(CartItem::getNumber).toArray(String[]::new);
额外体验优化
连续弹出多个Toast会导致消息排队等待很久,建议合并内容后单次弹出,代码如下:
StringBuilder contentBuilder = new StringBuilder(); for (CartItem item : cartArrayList) { contentBuilder.append("名称:") .append(item.getName()) .append(" 颜色:") .append(item.getColor()) .append(" 数量:") .append(item.getNumber()) .append("\n"); } Toast.makeText(getContext(), contentBuilder.toString(), Toast.LENGTH_LONG).show();
核心优化点
- 省去了三个额外数组的内存占用,代码精简度提升70%以上
- 循环次数从原有4次(1次数组赋值+3次数组遍历)降低到1次,执行效率更高
- 避免手动维护数组下标,减少数组越界等潜在问题风险
内容的提问来源于stack exchange,提问作者mohammad mansouri
相关产品推荐
相关产品推荐

