一、概述
在开发过程中有这样一个需求,想要把一个 List 分成多个指定大小的子 List,需求很简单,这里记录一下使用两种方式实现:
- 自己写 Java 代码实现
- 使用 guava 提供的工具类实现
二、写 Java 代码实现
实现代码如下所示:
public static <T> List<List<T>> partition(List<T> list, int size) {
List<List<T>> result = new ArrayList<>();
if (list == null) {
throw new NullPointerException("list 不能为 null");
}
if (size <= 0) {
throw new IllegalArgumentException("size 必须大于 0");
}
if (list.size() < size) {
result.add(list);
} else {
int r = list.size() / size;
for (int i = 0; i < r; i++) {
List<T> subList = list.subList(i * size, (i + 1) * size);
result.add(subList);
}
if (r * size < list.size()) {
List<T> subList = list.subList(r * size, list.size());
result.add(subList);
}
}
return result;
}
三、使用 guava 提供的工具类实现
第一步:添加依赖
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.0-jre</version>
</dependency>
第二步:调用 Lists.partition
public static void main(String[] args) {
List<String> idList = new ArrayList<>();
for (int i = 0; i < 25; i++) {
idList.add(UUID.randomUUID().toString());
}
List<List<String>> partition = Lists.partition(idList, 3);
for (List<String> strings : partition) {
System.out.println(strings.size());
System.out.println(strings);
}
}
网友评论