Java将一个list等分成n个list方法

来源:互联网 发布:淘宝卖保健品填厂家 编辑:程序博客网 时间:2024/06/06 05:21

  之前博主在学习python爬虫的时候,需要将一个list等分成n个list。自己也没有什么好的办法,所以就用了网上一个大神的现有方法。
  没毛病那我就把代码贴出来:

def splist(l, s):  return [l[i:i+s] for i in range(len(l)) if i%s==0]

  简洁不简洁?优雅不优雅?
  可能这段代码在另外的大神看来只能算中规中矩,但至少我这个菜鸟算是心服了。
  
  我自己也没好好整过这个实现的过程,凑巧今天项目过程中又碰到了这个问题,而且这次用的是java。虽然说处理的过程是有类似的地方,但真动手写起来还是比较棘手的。毕竟java没有像python这些丰富的库函数。
  
  网上我也找过一些方法,但都不是很满意,所以还是自己花时间折腾来造造轮子了。
  贴出我自己写的只能凑合看的代码(轻喷):

  /**     * 平分list成n份 数据量尽可能相等     * @param list 需要平分的list     * @param n    平分成n分     * @return     */    public static <T> List<List<T>> splitList(List<T> list, int n) {        List<List<T>> strList = new ArrayList<>();        if (list == null) return strList;        int size = list.size();        int quotient = size / n; // 商数        int remainder = size % n; // 余数        int offset = 0; // 偏移量        int len = quotient > 0 ? n : remainder; // 循环长度        int start = 0;  // 起始下标        int end = 0;    // 结束下标        List<T> tempList = null;        for (int i = 0; i < len; i++) {            if (remainder != 0) {                remainder--;                offset = 1;            } else {                offset = 0;            }            end = start + quotient + offset;            tempList = list.subList(start, end);            start = end;            strList.add(tempList);        }        return strList;    }

  代码也还算简单,只要理清楚这个思路就比较好写。

  写个主方法测试下:

public static void main(String[] args) {        List<Integer> integerList = new ArrayList<>();        // 原始数据:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]        for (int i = 0; i < 14; i++) {            integerList.add(i);        }        List<List<Integer>> splitList = splitList(integerList, 10); // 分成10等份        System.out.println(splitList);    }

  按10等份分组后输出的数据如下:

[[0, 1], [2, 3], [4, 5], [6, 7], [8], [9], [10], [11], [12], [13]]

  代码只是经过我几组简单数据的测试,可能还存在问题,评论区可做探讨,欢迎各路大神指点一二,不胜感激。

原创粉丝点击