Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将ArrayList拆分为多个列表?_Java_List_Split_Helper - Fatal编程技术网

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

Java 如何将ArrayList拆分为多个列表?,java,list,split,helper,Java,List,Split,Helper,请参见以下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); 我需要展示一个如下的例子: 要生成它的值,我只需调用 StringUtils.join(values, ","); // outpu

请参见以下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);
我需要展示一个如下的例子:

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

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);
Integer targetSize=3;//假设每个目标ArrayList的大小等于3
//答案就在这里
列表输出=SomeHelper.split(值,targetSize);
我应该使用什么帮助来实现我的目标?

首先,你可能会发现有用的帮助。以下是一个基本示例:

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;
}
publicstaticvoidmain(字符串…参数){
列表=新的ArrayList();
列表。添加(0);
增加第(1)款;
增加(2);
增加(3);
增加(4);
增加(5);
增加(6);
int targetSize=3;
列表=拆分(列表,targetSize);
System.out.println(列表);//[[0,1,2],[3,4,5],[6]]
}
公共静态列表拆分(列表列表,int targetSize){
List lists=新建ArrayList();
对于(int i=0;i
请注意,我没有使用拆分为
,因为它与
targetSize
结合使用没有多大意义。为每个子列表提供大小。

ListUtils
类中有一个分区方法。下面是它的工作原理:

import org.apache.commons.collections4.ListUtils;
...

int targetSize = 3;
List<Integer> values = ...
List<List<Integer>> output = ListUtils.partition(values, targetSize);
import org.apache.commons.collections4.ListUtils;
...
int targetSize=3;
列表值=。。。
列表输出=ListUtils.partition(值,targetSize);

Nitpick:可能应该向ArrayList构造函数提供targetSize,以便它立即分配适当大小的数组,并且以后不会过度分配/调整大小。不,
targetSize
不是
列表的长度。它会被分解成我没有使用的
子列表
已经考虑到了这一点。
新的ArrayList((list.size()/targetSize)+1)
会更好。事实上,你是对的。分成几个部分是没有意义的。(+1)哦,对了。我完全把代码看错了。我以为列表是为子列表制作的。谢谢你的更正。如前所述,正确的尺寸仍然可以确定。我认为人们喜欢重新发明wheelNo。问题是,在许多情况下,找到轮子比发明自己的轮子更难。顺便说一句,即使链接的类也会复制功能<代码>列表.asList(…)
重复
java.util.Arrays.asList()
。还有几个
newXXX
方法,如果新方法后面有空格,它们的功能将完全相同,从而调用构造函数。@jdmichal找到方向盘比为注释创建自己的(+1)更难jdmichal:这两种情况都不正确。”List List=Lists.newArrayList()可以用来代替“List List=new ArrayList()”。许多用户强烈希望避免冗余。Lists.asList()将一个元素和一个数组或两个元素和一个数组组合到一个列表中。如果你阅读文档,你会发现这是事实,以及为什么会这样。Arrays.asList()不会这样做。是什么让你如此感兴趣,试图抹黑我们的图书馆是车轮的翻版?
import org.apache.commons.collections4.ListUtils;
...

int targetSize = 3;
List<Integer> values = ...
List<List<Integer>> output = ListUtils.partition(values, targetSize);