Java中如何将一个数组分割成多个等长度的数组

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
         我们总共遍历的次数应该是我们最后获得集合的个数所以mlist.size()/4作为遍历长度。
         集合有一个方法List<E> 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<String> mList=new ArrayList<String>();
        List<List<String>>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]












发布了47 篇原创文章 · 获赞 54 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/m0_37667770/article/details/79024084