拆分list每100個一組,java 平均分割list_Java 實現將List平均分成若干個集合

 2023-09-30 阅读 21 评论 0

摘要:1.初衷是由于調用銀行接口的批量處理接口時,每次最多只能處理500條數據,但是當數據總數為510條時。我又不想第一次調用處理500條,第二次調用處理10條數據,我想要的是每次處理255條數據。拆分list每100個一組、下面展示的是我的處理方法2.寫了一個

1.初衷是由于調用銀行接口的批量處理接口時,每次最多只能處理500條數據,但是當數據總數為510條時。我又不想第一次調用處理500條,第二次調用處理10條數據,我想要的是每次處理255條數據。

拆分list每100個一組、下面展示的是我的處理方法

2.寫了一個簡單的ListUtils:

package com.example.springboottest.common.util;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import com.google.common.collect.Lists;

/**

* List 工具類

* @author Neo

* @date 2018年4月16日13:13:37

*/

public class ListUtils {

/**

* 將一個List均分成n個list,主要通過偏移量來實現的

*

* @param source 源集合

* @param limit 最大值

* @return

*/

public static List> averageAssign(List source, int limit) {

if (null == source || source.isEmpty()) {

return Collections.emptyList();

}

List> result = new ArrayList<>();

int listCount = (source.size() - 1) / limit + 1;

int remaider = source.size() % listCount; // (先計算出余數)

int number = source.size() / listCount; // 然后是商

int offset = 0;// 偏移量

for (int i = 0; i < listCount; i++) {

List value;

if (remaider > 0) {

value = source.subList(i * number + offset, (i + 1) * number + offset + 1);

remaider--;

offset++;

} else {

value = source.subList(i * number + offset, (i + 1) * number + offset);

}

result.add(value);

}

return result;

}

public static void main(String[] args) {

List list = new ArrayList();

for (int i = 0; i < 65; i++) {

list.add(i);

}

List result = averageAssign(list, 15);

result.forEach(l -> {

l.forEach(i ->

System.out.print(i + "\t")

);

System.out.println();

});

System.out.println("====================================================");

result = averageAssign(list, 20);

result.forEach(l -> {

l.forEach(i ->

System.out.print(i + "\t")

);

System.out.println();

});

System.out.println("====================================================");

// Guava 實現不平均分組

result = Lists.partition(list ,100);

result.forEach(l -> {

l.forEach(i ->

System.out.print(i + "\t")

);

System.out.println();

});

}

}

3.展示一下測試結果:

d28009fcd1f260c4d715756a3da3e7a9.png

補充知識:Java8 Lambda 分割List

我就廢話不多說了,大家還是直接看代碼吧~

/**

* @author caishen

* @version 1.0

* @className CollectionUtils

* @date 2019/5/23 11:54

* 自分で書いたコードの各行を擔當する

* @dis 切割list工具類

**/

public class CollectionUtils {

public static List> divide(Listorigin , int size){

if(Assert.isEmpty(origin)){

return Collections.emptyList();

}

int block = (origin.size() + size -1) / size;

return IntStream.range(0,block).

boxed().map(i->{

int start = i*size;

int end = Math.min(start + size,origin.size());

return origin.subList(start,end);

}).collect(Collectors.toList());

}

public static void main(String[] args) {

System.out.println(divide(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 3));

}

}

以上這篇Java 實現將List平均分成若干個集合就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/107026.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息