1.初衷是由于调用银行接口的批量处理接口时,每次最多只能处理500条数据,但是当数据总数为510条时。我又不想第一次调用处理500条,第二次调用处理10条数据,我想要的是每次处理255条数据。
下面展示的是我的处理方法
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 <T> List<List<T>> averageAssign(List<T> source, int limit) { if (null == source || source.isEmpty()) { return Collections.emptyList(); } List<List<T>> 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<T> 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<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.展示一下测试结果:
补充知识:Java8 Lambda 分割List
我就废话不多说了,大家还是直接看代码吧~
/** * @author caishen * @version 1.0 * @className CollectionUtils * @date 2019/5/23 11:54 * 自分で書いたコードの各行を担当する * @dis 切割list工具类 **/ public class CollectionUtils { public static <T> List<List<T>> divide(List<T>origin , 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平均分成若干个集合就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍java实现把一个List集合拆分成多个的操作,包括了java实现把一个List集合拆分成多个的操作的使用技巧和注意事项,需要的朋友参考一下 有些时候我们需要对一批数据进行分批处理, 使用subList方法可以实现对List集合进行固定长度的分割. 输出结果: 补充知识:java将大集合按照固定长度拆分为小集合 我们在使用java中的集合(Collection、List、Set等)的
我有一个数组,其中有400个(但可以是任何名称)名称,我想发送给API,但API每次最多只接收200个请求,如何将数组分块,以便每第200个项目执行一个操作? 这是我到目前为止,而不是使我的API请求,我只是试图输出数组的页面。 这将第一个200返回到一个数组中,但不是其余的-但是不管怎样,如果传入的数组是5000,我不想为每200写一个大量的if语句。 有人提出建议吗?
将一个整数,分拆为若干整数的和。例如实现: 4=3+1 4=2+2 4=2+1+1 4=1+1+1+1 解决(Python) #! /usr/bin/env python #encoding:utf-8 """ """ def int_divided(m,r,out_list): if(r==0): return True tm=r while tm>0:
定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个0~100之间的随机整数, (1)将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出来。 (2)将这40个成绩按照从高到低的顺序输出出来。 解决(python) #! /usr/bin python #coding:utf-8 from __future__ import division
问题内容: 我基本上有一个像这样的值数组: 上面的数组过于简化,我在实际代码中每毫秒收集1个值,我需要使用编写的算法处理输出,以找到某个时间点之前最接近的峰值。我的逻辑失败了,因为在上面的示例中,它是真正的峰值,但是我的算法会向后看,并看到最后一个数字是峰值,因为之前的数值减少了。 目标是获取这些值,并对它们应用一种算法,该算法将使它们“平滑”一些,以便获得更多的线性值。(即:我希望自己的成绩是弯
本文向大家介绍java实现将结果集封装到List中的方法,包括了java实现将结果集封装到List中的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现将结果集封装到List中的方法。分享给大家供大家参考,具体如下: 希望本文所述对大家java程序设计有所帮助。