Java 中 List 分片的 5 种方法
在Java中,我们可以通过多种方式对List进行分片。以下是五种主要的方法:
- 使用Java 8 Stream API
- 使用Apache Commons Collections
- 使用Google Guava
- 使用手动分页
- 使用SubList方法
下面是每种方法的详细描述和示例代码:
- 使用Java 8 Stream API
import java.util.List;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public List<List<T>> splitListToChunksWithStreamAPI<T>(List<T> list, final int chunkSize) {
List<List<T>> chunks = new ArrayList<>();
final int size = list.size();
IntStream.range(0, size / chunkSize + 1).map(i -> i * chunkSize).forEach(i -> {
if (i + chunkSize < size) {
chunks.add(list.subList(i, i + chunkSize));
} else if (i < size) {
chunks.add(list.subList(i, size));
}
});
return chunks;
}
- 使用Apache Commons Collections
import org.apache.commons.collections4.ListUtils;
public List<List<T>> splitListToChunksWithApacheCommons<T>(List<T> list, final int chunkSize) {
List<List<T>> chunks = new ArrayList<>();
for (final List<T> chunk : ListUtils.partition(list, chunkSize)) {
chunks.add(chunk);
}
return chunks;
}
- 使用Google Guava
import com.google.common.collect.Lists;
public List<List<T>> splitListToChunksWithGuava<T>(List<T> list, final int chunkSize) {
List<List<T>> chunks = Lists.partition(list, chunkSize);
return chunks;
}
- 使用手动分页
public List<List<T>> splitListToChunksManually<T>(List<T> list, final int chunkSize) {
List<List<T>> chunks = new ArrayList<>();
int listSize = list.size();
for (int i = 0; i < listSize; i += chunkSize) {
chunks.add(list.subList(i, Math.min(listSize, i + chunkSize)));
}
return chunks;
}
- 使用SubList方法
public List<List<T>> splitListToChunksWithSubList<T>(List<T> list, final int chunkSize) {
List<List<T>> chunks = new ArrayList<>();
int listSize = list.size();
for (int i = 0; i < listSize; i += chunkSize) {
chunks.add(list.subList(i, Math.min(listSize, i + chunkSize)));
}
return chunks;
}
以上五种方法都可以用于将Java中的List分割成多个分块。你可以根据项目中已经使用的库或者个人喜好来选择合适的方法。
评论已关闭