1. list集合几种用法
在项目开发过程中,有时候会有这样的需求,比如自己项目中的地址列表:
情景一:
地址列表中有2种地址,第一种是默认地址,第二种是非默认地址,如果有默认地址,就把默认地址置顶,否则服务器返回的地址列表的就是按照时间排序的,最新添加的地址在最下边,最早添加的在最上边;
情景二:
在确认订单页面需要设置收货地址,需要请求地址列表接口,根据返回的list集合判断,如果集合中有默认地址就设置默认地址,否则就设置最新添加的地址;
上边这两种情况会用到:把 list中的 某一条数据添加到list集合的首位或者最后一位;
2. 解决方案
对于地址列表展示默认地址置顶,其他地址按照服务器返回顺序显示即可:
第一步:首先请求地址列表接口,服务器返回addressList集合;
第二步:然后遍历 addressList集合,取出 status,判断如果 status = 1,取出 i 位置对应的 dataBean 实体类对象,并且把 i 位置 remove移除掉,然后重新把 dataBean添加到 addressList集合的首位;
第三步:然后在给 lv或者rv列表显示数据时候就可以直接使用 变换之后的 addressList集合;
// 遍历 addressList集合
for (int i = 0; i < addressList.size(); i++) {
// 获取 status
int status = addressList.get(i).getStatus();
// 如果 status=1,表示 有默认地址
if (status == 1){
// 然后取出 i 位置对应的 实体类对象数据
ShowAddreessBean.DataBean dataBean = addressList.get(i);
// 并且移除 i 位置
addressList.remove(i);
// 然后把 取出的默认地址 dataBean 重新添加到 addressList中,
// 这个集合第一个位置的数据就是 默认地址,然后就可以直接用于 给 lv或者rv 填充数据即可
addressList.add(0,dataBean);
Log.e("TAG" , "集合:"+addressList.size()+", 对应json:"+new Gson().toJson(addressList)) ;
}
}
对于确认订单页面设置收货地址做法:
第一步:首先请求地址列表接口,服务器返回list集合;
第二步:然后遍历list集合,如果集合中有默认地址,就取出默认地址对应的实体类对象,并且把该位置的数据remove移除掉,然后重新把 这条取出的默认地址的数据添加到 list集合中的首位或者最后一位;
// 下边的:status 为1表示默认地址;为0表示非默认地址
// addressList集合 是服务器返回的地址列表集合
// 遍历 addressList集合
for (int i = 0; i < addressList.size(); i++) {
// 取出status
int status = addressList.get(i).getStatus();
// 如果status = 1:表示默认地址,
if (status == 1){
// 首先 取出位置 i 对应的实体类dataBean
ShowAddreessBean.DataBean dataBean = addressList.get(i);
// 并且 从addressList集合中移除位置 i
addressList.remove(i);
// 然后 把status=1的数据dataBean 添加到集合最后一位
addressList.add(addressList.size(), dataBean);
// 然后 把status=1的数据dataBean 添加到集合第一位
// addressList.add(0, dataBean);
}
}
3. 总结
1>:需求:现在顺序是 0,2,4 , 6 , 8,把6放到首位
// 从list集合中取出角标为3的数据
Integer temp = list.get(3);
// 并且移除角标为3的位置
list.remove(3);
// 然后把刚才取出角标为3的数据重新添加到 list集合中即可
list.add(0, temp);
2>:对于list集合,要注意的地方:
for (int i = 0; i < addressList.size(); i++) {
int status = addressList.get(i).getStatus();
if (status == 1){
ShowAddreessBean.DataBean dataBean = addressList.get(i);
addressList.remove(i);
// 把status=1的数据添加到集合最后一位,
// 注意:这里是addressList.size(),不是addressList.size()-1
addressList.add(addressList.size(), dataBean);
// 把status=1的数据添加到集合第0位
// addressList.add(0 , dataBean);
}
}
// 获取集合最后一个元素,这里是 addressList.size() - 1,这个是最后一个元素的角标
String location = addressList.get(addressList.size() - 1).getLocation() ;
String mobile = addressList.get(addressList.size() - 1).getMobile();