java List 按指定长度分割

场景: 把一个List集合按指定长度分割成组


1. 手动实现 (已经自测通过)
   private List> splitList(List list , int groupSize){
        int length = list.size();
        // 计算可以分成多少组
        int num = ( length + groupSize - 1 )/groupSize ; // TODO 
        List> newList = new ArrayList<>(num);
        for (int i = 0; i < num; i++) {
            // 开始位置
            int fromIndex = i * groupSize;
            // 结束位置
            int toIndex = (i+1) * groupSize < length ? ( i+1 ) * groupSize : length ;
            newList.add(list.subList(fromIndex,toIndex)) ;
        }
        return  newList ;
    }

*注:TODO 标注部分是个小技巧,正常情况下计算能拆分多少组是:
length % groupSize == 0 ? length / groupSize : length / groupSize +1
这里使用 ( length + groupSize - 1 ) / groupSize则减少运算了。

2. 使用guave实现
   import com.google.common.collect.Lists;
   private List> splitList(List list , int groupSize){
        return  Lists.partition(list, groupSize); // 使用guava
    }

注:如果要了解其它工具类的实现此功能,可以看最后两篇引用的文章
  • Java 将List按照指定大小分段
  • Java List按大小分片,平均切分
  • Partition a List in Java [推荐]
  • java 将list按照指定数量分成小list 注:有点像 Partition a List in Java 的翻译

你可能感兴趣的:(java List 按指定长度分割)