吉林網(wǎng)站建設(shè)業(yè)務(wù)日本shopify獨(dú)立站
日常中需要對一個(gè)大的集合進(jìn)行拆分成多個(gè)小集合,其主要思路為:
- 設(shè)置需要拆分多少個(gè)小集合 A
- 大集合里面有多少條數(shù)據(jù) B
- 計(jì)算出每個(gè)集合里面有多個(gè)條數(shù)據(jù) C=B/A
- 計(jì)算出看是否存在余數(shù) D=B%A
- 采用集合(List.subList())的方法對大集合進(jìn)行拆分,循環(huán)A變進(jìn)行集合拆分(List.subList((A-1)*C,(A-1)*C+(C-1))
- 如果存在余數(shù)D,則需要將剩余的數(shù)據(jù)放在一個(gè)集合中 (List.subList((AC,AC+D)
代碼如下:
/*** 集合切分(將一個(gè)1002大小的集合,拆分為5個(gè)小集合)* @param list 目標(biāo)集合* @param partitionSize 需要拆分集合的個(gè)數(shù)* @param <T> 泛型對象* @return 切分后的總的集合*/public static <T> List<List<T>> listPartition(List<T> list, int partitionSize) {//①如果集合時(shí)空的或者初始設(shè)置的集合大小小于等于0,返回一個(gè)新集合if (list.isEmpty() || partitionSize <= 0) {return new ArrayList();}//②封裝最后返回的結(jié)果集的集合List<List<T>> listResult = new ArrayList<>();int size = list.size();//③如果目標(biāo)集合的大小小于設(shè)置集合的大小,將目標(biāo)集合,全部加載到封裝結(jié)果集中,返回結(jié)束if (size <= partitionSize) {listResult.add(list);return listResult;}//④計(jì)算出拆分的集合的大小(size =1002, partitionSize= 5 partitionNum =200 partitionRemainder=2)int partitionNum = size / partitionSize;//⑤計(jì)算出最后一個(gè)拆分集合的大小int partitionRemainder = size % partitionSize;for (int a = 1; a <= partitionSize; a++) {//⑥對目標(biāo)集合進(jìn)行截取 ((1-1)*200,((1-1)*200)+(200-1))List<T> ts = list.subList((a - 1) * partitionNum, ((a - 1) * partitionNum) + (partitionNum - 1));listResult.add(ts);}//⑦如果最后一個(gè)拆分集合的大小大于0if (partitionRemainder > 0) {//⑧對目標(biāo)集合進(jìn)行截取 ((200*5,200*5+2)List<T> ts = list.subList(partitionNum * partitionSize, partitionNum * partitionSize + partitionRemainder);listResult.add(ts);}//⑨返回結(jié)果集return listResult;}