代码之家  ›  专栏  ›  技术社区  ›  Arthur Ronald

如何将ArrayList拆分为多个列表?

  •  2
  • Arthur Ronald  · 技术社区  · 16 年前

    请参见以下ArrayList:

    List<Integer> values = new ArrayList<Integer>();
    values.add(0);
    values.add(1);
    values.add(2);
    values.add(3);
    values.add(4);
    values.add(5);
    values.add(6);
    

    所以我们有:

    integerList.size(); // outputs 7 elements
    

    我需要展示一个 Google chart 如下:

    http://chart.apis.google.com/chart?chs=300x200&chd=t:60,-1,80,60,70,35&cht=bvg&chbh=20,4,20&chco=4C5F2B,BED730,323C19&chxt=y&chxr=0,0,500

    要生成它的值,我只需要调用

    StringUtils.join(values, ","); // outputs 0,1,2,3,4,5,6
    

    它发生了 它最多支持 1000像素宽。所以如果我有很多值,我需要将我的arraylist拆分成其他arraylist来生成其他图表。类似于:

    Integer targetSize = 3; // And suppose each target ArrayList has size equal to 3
    
    // ANSWER GOES HERE
    List<List<Integer>> output = SomeHelper.split(values, targetSize);
    

    我应该用什么助手来达到我的目标?

    3 回复  |  直到 10 年前
        1
  •  15
  •   Kevin Bourrillion Gergely    16 年前

    谷歌收藏有 Lists.partition() . 为每个子列表提供大小。

        2
  •  12
  •   BalusC    16 年前

    首先,你会发现 List#subList() 有用的。下面是一个基本示例:

    public static void main(String... args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(0);
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
    
        int targetSize = 3;
        List<List<Integer>> lists = split(list, targetSize);
        System.out.println(lists); // [[0, 1, 2], [3, 4, 5], [6]]
    }
    
    public static <T extends Object> List<List<T>> split(List<T> list, int targetSize) {
        List<List<T>> lists = new ArrayList<List<T>>();
        for (int i = 0; i < list.size(); i += targetSize) {
            lists.add(list.subList(i, Math.min(i + targetSize, list.size())));
        }
        return lists;
    }
    

    注意,我没有使用 splittedInto 因为与 targetSize .

        3
  •  0
  •   johnnieb    10 年前

    Apache Commons Collections 4 有一个 分区 中的方法 ListUtils 班级。其工作原理如下:

    import org.apache.commons.collections4.ListUtils;
    ...
    
    int targetSize = 3;
    List<Integer> values = ...
    List<List<Integer>> output = ListUtils.partition(values, targetSize);
    
    推荐文章