Java中如何将一个数组分割成多个等长度的数组,最后剩下的为一个素组
- 先看图
- 分析数据
- 提取公式
- 分装代码
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
我们总共遍历的次数应该是我们最后获得集合的个数所以()/4作为遍历长度。
集合有一个方法List<E> subList(int fromIndex, int toIndex)可以截取获取集合
如上我们可以得出
for (int j = 0; j < () /4 + 1; j++) {
if ((j * 4 + 4) < ()) {
((j * 4, j * 4 + 4));
} else if ((j * 4 + 4) > ()) {
((j * 4, ()));
} else if (() <4) {
((0, ()));
}
}
```
运行结果如下:
[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]
[]
()/4是否能够被整除,如果是4的倍数,那么会出现空集合问题。希望自己测试看看。所以这里需要
()%4判断是否被整除。
代码如下:
if( ()%4!=0) {
for (int j = 0; j < () / 4 + 1; j++) {
if ((j * 4 + 4) < ()) {
((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) > ()) {
((j * 4, ()));
} else if (() <4) {
((0, ()));
}
}
}else if(()%4==0){
for (int j = 0; j < () / 4; j++) {
if ((j * 4 + 4) <= ()) {
((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) > ()) {
((j *4, ()));
} else if (() < 4) {
((0, ()));
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
最后封装代码
package ;
import ;
import ;
/**
* Created by 路很长~ on 2018/1/10.
*/
public class Mtext {
public static void main(String[] args){
//这里的数字是买一个数组的长度
getList(4);
}
private static void getList(int targ) {
List<String> mList=new ArrayList<String>();
List<List<String>>mEndList=new ArrayList<>();
for (int i = 0; i<21; i++){
("item"+i);
}
(());
if( ()%targ!=0) {
for (int j = 0; j < () / targ + 1; j++) {
if ((j * targ + targ) < ()) {
((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) > ()) {
((j * targ, ()));
} else if (() < targ) {
((0, ()));
}
}
}else if(()%targ==0){
for (int j = 0; j < () / targ; j++) {
if ((j * targ + targ) <= ()) {
((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) > ()) {
((j * targ, ()));
} else if (() < targ) {
((0, ()));
}
}
}
for (int i = 0; i < (); i++) {
((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]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73