1.如下我们需求
最近朋友android项目中有一个需求如下:
这一个长集合[item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18, item19, item20]
分割成下4个元素一组的小集合,剩下的为一个集合:
[item0, item1, item2, item3]
[item4, item5, item6, item7]
[item8, item9, item10, item11]
[item12, item13, item14, item15]
[item16, item17, item18, item19]
[item20]
2.数据分析
通过如上数据我们可以分析
第一个集合中:是索引index为:0-3 item0,item1,item2,item3
第二个集合中:是索引index为:4-7 ......
第三个集合中:是索引index为:8-11
第四个集合中:是索引index为:12-15
第五个集合中:是索引index为:16-19
第六个集合中:是索引index为:20 itme20
如上我们发现0 4 8 12 16 20
可知道规律:i*4为第一个索引第二个为 i*4+3
我们总共遍历的次数应该是我们最后获得集合的个数所以mlist.size()/4作为遍历长度。
集合有一个方法List subList(int fromIndex, int toIndex)可以截取获取集合
如上我们可以得出
for (int j = 0; j < mList.size() /4 + 1; j++) {
if ((j * 4 + 4) < mList.size()) {
mEndList.add(mList.subList(j * 4, j * 4 + 4));
} else if ((j * 4 + 4) > mList.size()) {
mEndList.add(mList.subList(j * 4, mList.size()));
} else if (mList.size() <4) {
mEndList.add(mList.subList(0, mList.size()));
}
}
```
运行结果如下:
[item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18, item19, item20]
[item0, item1, item2, item3]
[item4, item5, item6, item7]
[item8, item9, item10, item11]
[item12, item13, item14, item15]
[item16, item17, item18, item19]
[item20]
这里需要考虑这个如果长集合是8个元素呢!上面代码运行之后如下:
长数组:[item0, item1, item2, item3, item4, item5, item6, item7]
//运行结果:如下两个数组
[item0, item1, item2, item3]
[]
mlist.size()/4是否能够被整除,如果是4的倍数,那么会出现空集合问题。希望自己测试看看。所以这里需要
mlist.size()%4判断是否被整除。
代码如下:
if( mList.size()%4!=0) {
for (int j = 0; j < mList.size() / 4 + 1; j++) {
if ((j * 4 + 4) < mList.size()) {
mEndList.add(mList.subList(j * 4, j * 4+ 4));//0-3,4-7,8-11 j=0,j+3=3 j=j*3+1
} else if ((j * 4 + 4) > mList.size()) {
mEndList.add(mList.subList(j * 4, mList.size()));
} else if (mList.size() <4) {
mEndList.add(mList.subList(0, mList.size()));
}
}
}else if(mList.size()%4==0){
for (int j = 0; j < mList.size() / 4; j++) {
if ((j * 4 + 4) <= mList.size()) {
mEndList.add(mList.subList(j *4, j * 4 + 4));//0-3,4-7,8-11 j=0,j+3=3 j=j*3+1
} else if ((j * 4+ 4) > mList.size()) {
mEndList.add(mList.subList(j *4, mList.size()));
} else if (mList.size() < 4) {
mEndList.add(mList.subList(0, mList.size()));
}
}
}
最后封装代码
package com.example.ls.shoppingmall;
import java.util.ArrayList;
import java.util.List;
/**
* Created by 路很长~ on 2018/1/10.
*/
public class Mtext {
public static void main(String[] args){
//这里的数字是买一个数组的长度
getList(4);
}
private static void getList(int targ) {
List mList=new ArrayList();
List>mEndList=new ArrayList<>();
for (int i = 0; i<21; i++){
mList.add("item"+i);
}
System.out.println(mList.toString());
if( mList.size()%targ!=0) {
for (int j = 0; j < mList.size() / targ + 1; j++) {
if ((j * targ + targ) < mList.size()) {
mEndList.add(mList.subList(j * targ, j * targ + targ));//0-3,4-7,8-11 j=0,j+3=3 j=j*3+1
} else if ((j * targ + targ) > mList.size()) {
mEndList.add(mList.subList(j * targ, mList.size()));
} else if (mList.size() < targ) {
mEndList.add(mList.subList(0, mList.size()));
}
}
}else if(mList.size()%targ==0){
for (int j = 0; j < mList.size() / targ; j++) {
if ((j * targ + targ) <= mList.size()) {
mEndList.add(mList.subList(j * targ, j * targ + targ));//0-3,4-7,8-11 j=0,j+3=3 j=j*3+1
} else if ((j * targ+ targ) > mList.size()) {
mEndList.add(mList.subList(j * targ, mList.size()));
} else if (mList.size() < targ) {
mEndList.add(mList.subList(0, mList.size()));
}
}
}
for (int i = 0; i < mEndList.size(); i++) {
System.out.println(mEndList.get(i).toString()+"");
}
}
}
运行结果:
[item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18, item19, item20]
结果:
[item0, item1, item2, item3]
[item4, item5, item6, item7]
[item8, item9, item10, item11]
[item12, item13, item14, item15]
[item16, item17, item18, item19]
[item20]