Android开发:如何用单个for循环遍历动态选择的ArrayList
解决方法:通过预定义目标列表实现单循环筛选
你可以先根据条件确定要遍历的目标列表,再对这个列表执行一次循环完成筛选,这样就能去掉重复的循环代码,只用一个for循环实现需求:
修改后的代码
private void filter(String searchText) { ArrayList<Card> searchList = new ArrayList<>(); // 先根据条件确定要遍历的目标列表 List<Card> targetList = smallList != null && !smallList.isEmpty() ? smallList : mainList; // 对目标列表执行单次循环筛选 for (Card cardItem : targetList) { if (cardItem.getInfo().contains(searchText)) { searchList.add(cardItem); } } ... }
额外优化:处理mainList为空的情况
如果mainList也存在为null或空列表的可能,建议增加判空逻辑避免空指针异常:
private void filter(String searchText) { ArrayList<Card> searchList = new ArrayList<>(); List<Card> targetList; // 优先选择非空的smallList,否则检查mainList是否有效 if (smallList != null && !smallList.isEmpty()) { targetList = smallList; } else if (mainList != null && !mainList.isEmpty()) { targetList = mainList; } else { // 两个列表都为空,直接返回空结果 return; } for (Card cardItem : targetList) { if (cardItem.getInfo().contains(searchText)) { searchList.add(cardItem); } } ... }
逻辑说明
- 先通过条件判断把
smallList或mainList赋值给统一的targetList变量 - 后续只需要对
targetList执行一次循环,完成包含搜索文本的Card筛选 - 这种写法分离了「列表选择」和「筛选逻辑」,减少了重复代码,更易维护
内容的提问来源于stack exchange,提问作者AJW
相关产品推荐
相关产品推荐

