日常开发中,经常遇到拆分集合处理的场景,现在记录2中拆分集合的方法。
1. 使用Guava包提供的集合操作工具栏 Lists.partition()方法拆分
首先,引入maven依赖
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>21.0</version>
</dependency>
部分源码
public static <T> List<List<T>> partition(List<T> list, int size) {Preconditions.checkNotNull(list);Preconditions.checkArgument(size > 0);return (List)(list instanceof RandomAccess ? new Lists.RandomAccessPartition(list, size) : new Lists.Partition(list, size));}
Lists.partition方法,根据传入的size,对list进行拆分
使用Demo
public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);List<List<Integer>> partition = Lists.partition(list, 3);partition.forEach(l -> System.out.println(JSONObject.toJSONString(l)));
}
2. 自定义集合拆分方法partition
使用List的 subList方法自定义集合拆分
/*** 分割集合** @param list 原集合* @param count 分割后,每个集合大小* @return java.util.List<java.util.List<T>>**/public static <T> List<List<T>> partition(List<T> list, int count) {List<List<T>> result = new ArrayList<>();int total = list.size();int pageSize = total % count == 0 ? total / count : total / count + 1;for (int i = 0; i < pageSize; i++) {int start = i * count;int end = Math.min((start + count), total);List<T> ts = list.subList(start, end);result.add(ts);}return result;}
使用Demo
public static void main(String[] args) {List<String> strList = new ArrayList<>();strList.add("一月");strList.add("二月");strList.add("三月");strList.add("四月");strList.add("五月");strList.add("六月");strList.add("七月");strList.add("八月");strList.add("九月");strList.add("十月");strList.add("十一月");List<List<String>> listList = partition(strList, 3);listList.forEach(l -> System.out.println(JSONObject.toJSONString(l)));}
输出结果