Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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—将数组分组为更小的数组_Java_Arrays_Sublist - Fatal编程技术网

Java—将数组分组为更小的数组

Java—将数组分组为更小的数组,java,arrays,sublist,Java,Arrays,Sublist,这让我绞尽脑汁,想知道我是否能得到一个建议 子列表的分组将取决于原始组的大小,而原始组的大小将有所不同。 但如果我有这个: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 我需要把这些分组成这个 [0, 4, 8] [1, 5, 9] [2, 6, 10] [3, 7, 11] 如果我有这个: [0, 1, 2, 3,

这让我绞尽脑汁,想知道我是否能得到一个建议

子列表的分组将取决于原始组的大小,而原始组的大小将有所不同。 但如果我有这个:

 [0,    1,  2,   3,     4,  5,  6,  7,  8,  9,  10,     11]
我需要把这些分组成这个

 [0,     4,       8]
 [1,     5,       9]
 [2,     6,       10]
 [3,     7,       11]
如果我有这个:

 [0,    1,  2,   3,     4,  5,  6,  7]
我需要将它分成4部分,如下所示:

 [0,     4]
 [1,     5]
 [2,     6]
 [3,     7]
我需要找到每个小组中最小的一个,但我能处理

已编辑:很抱歉忘记提及,每次显示4个数组,但可以是3或5或其他值。 我认为这使得这个问题更加复杂。

变量 分组算法中有两个变量

输入数组的大小 组数或每组元素数 行为 根据输入参数对输入数组进行分组 如果数组的大小不是组数的精确倍数,则某些组的计数可能与其他组不同 给出了假设分组数的算法 初始化列表外部列表将包含N个列表 迭代输入数组 让输入数组的当前索引为i 将元素作为list.geti%N.addinput[i]添加到第i%N个列表中 密码 公共列表groupint[]输入,最终int groupCount{ 列表组=IntStream.range0,groupCount .mapToObji->new ArrayList .toList; 对于int i=0;i 输入数组的大小 组数或每组元素数 行为 根据输入参数对输入数组进行分组 如果数组的大小不是组数的精确倍数,则某些组的计数可能与其他组不同 给出了假设分组数的算法 初始化列表外部列表将包含N个列表 迭代输入数组 让输入数组的当前索引为i 将元素作为list.geti%N.addinput[i]添加到第i%N个列表中 密码 公共列表groupint[]输入,最终int groupCount{ 列表组=IntStream.range0,groupCount .mapToObji->new ArrayList .toList; 对于int i=0;i所以基本上:每次都要将一个数组拆分为四个数组

然后,您可以执行以下操作:

public static List<Integer[]> getSubArrays(int[] target, int numberOfArrays)
{
    System.out.println("+++");
    List<Integer[]> arrays = new ArrayList<>();     
    for(int i = 0; i<numberOfArrays; i++)
    {
        
        Integer[] partArray = new Integer[target.length/numberOfArrays];
                
        int itt = 0;
        for(int b = i; b<target.length; b=b+numberOfArrays)
        {
            partArray[itt++] = target[b];
        }
        
        System.out.println(Arrays.deepToString(partArray));
        arrays.add(partArray);
        
    }
    return arrays;
    
    
}

public static void main(String[] args)
{
    
    int[] firstArray =  {0,1,2,3,4,5,6,7,8,9,10,11};
    int[] secondArray = {0,1,2,3,4,5,6,7};
    int[] thirdArray = {0,1,2,3};
    int[] unequalArray = {0,1,2,3,4};
    
    getSubArrays(firstArray,4);
    getSubArrays(secondArray,4);
    getSubArrays(thirdArray,4);
    getSubArrays(unequalArray,4);
}

所以基本上:每次都要将一个数组拆分为四个数组

然后,您可以执行以下操作:

public static List<Integer[]> getSubArrays(int[] target, int numberOfArrays)
{
    System.out.println("+++");
    List<Integer[]> arrays = new ArrayList<>();     
    for(int i = 0; i<numberOfArrays; i++)
    {
        
        Integer[] partArray = new Integer[target.length/numberOfArrays];
                
        int itt = 0;
        for(int b = i; b<target.length; b=b+numberOfArrays)
        {
            partArray[itt++] = target[b];
        }
        
        System.out.println(Arrays.deepToString(partArray));
        arrays.add(partArray);
        
    }
    return arrays;
    
    
}

public static void main(String[] args)
{
    
    int[] firstArray =  {0,1,2,3,4,5,6,7,8,9,10,11};
    int[] secondArray = {0,1,2,3,4,5,6,7};
    int[] thirdArray = {0,1,2,3};
    int[] unequalArray = {0,1,2,3,4};
    
    getSubArrays(firstArray,4);
    getSubArrays(secondArray,4);
    getSubArrays(thirdArray,4);
    getSubArrays(unequalArray,4);
}

这里有三种解决方案,第一种是列表列表。第二个是数组的数组。如果提供的数组长度不是组大小的整数倍,则每个方法都会引发异常

第三种方法允许组大小的非整数倍数

所有方法都使用嵌套流来创建所需的结果

int[] v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

List<?> lists = groupLists(v, 4);
for (Object o : lists) {
    System.out.println(o);
}
int[][] vals = groupArrays(v, 4);
for (int[] o : vals) {
    System.out.println(Arrays.toString(o));
}
方法返回列表

public static List<List<Integer>> groupLists(final int[] vals,
        final int groupSize) {
    if (vals.length % groupSize != 0) {
        throw new IllegalArgumentException(
                "Array length not a multiple of group size");
    }

    return IntStream.range(0, groupSize)
            .mapToObj(i -> IntStream
                    .range(0, vals.length / groupSize)
                    .mapToObj(k -> Integer
                            .valueOf(vals[k * groupSize + i]))
                    .collect(Collectors.toList()))
            .collect(Collectors.toList());
}
此方法使用筛选器尽可能多地填充返回的列表,以避免生成索引越界异常

int[] v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<?> lists = groupListsPartial(v, 4);
for (Object o : lists) {
    System.out.println(o);
}
方法

public static List<List<Integer>> groupListsPartial(final int[] vals,
        final int groupSize) {
    
    return IntStream.range(0, groupSize)
            .mapToObj(i -> IntStream
                    .range(0, (vals.length+(groupSize-1)) / groupSize)
                    .filter(k->k*groupSize + i <vals.length)
                    .mapToObj(k -> Integer
                            .valueOf(vals[k * groupSize + i]))
                    .collect(Collectors.toList()))
            .collect(Collectors.toList());
}

这里有三种解决方案,第一种是列表列表。第二个是数组的数组。如果提供的数组长度不是组大小的整数倍,则每个方法都会引发异常

第三种方法允许组大小的非整数倍数

所有方法都使用嵌套流来创建所需的结果

int[] v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

List<?> lists = groupLists(v, 4);
for (Object o : lists) {
    System.out.println(o);
}
int[][] vals = groupArrays(v, 4);
for (int[] o : vals) {
    System.out.println(Arrays.toString(o));
}
方法返回列表

public static List<List<Integer>> groupLists(final int[] vals,
        final int groupSize) {
    if (vals.length % groupSize != 0) {
        throw new IllegalArgumentException(
                "Array length not a multiple of group size");
    }

    return IntStream.range(0, groupSize)
            .mapToObj(i -> IntStream
                    .range(0, vals.length / groupSize)
                    .mapToObj(k -> Integer
                            .valueOf(vals[k * groupSize + i]))
                    .collect(Collectors.toList()))
            .collect(Collectors.toList());
}
此方法使用筛选器尽可能多地填充返回的列表,以避免生成索引越界异常

int[] v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<?> lists = groupListsPartial(v, 4);
for (Object o : lists) {
    System.out.println(o);
}
方法

public static List<List<Integer>> groupListsPartial(final int[] vals,
        final int groupSize) {
    
    return IntStream.range(0, groupSize)
            .mapToObj(i -> IntStream
                    .range(0, (vals.length+(groupSize-1)) / groupSize)
                    .filter(k->k*groupSize + i <vals.length)
                    .mapToObj(k -> Integer
                            .valueOf(vals[k * groupSize + i]))
                    .collect(Collectors.toList()))
            .collect(Collectors.toList());
}

我相信我已经找到了一种方法,可以根据组数是4还是其他来实现这一点

  i++ // in an outer loop

 .....................
 ArrayList compareSet = new ArrayList();
 int nCrement = 0;
 int nX = 4; // is 4 right now but could be something else
 for (int j = 0; j < listSet.size(); j++) {  
 String value = (String) listSet.get(i + nCrement);   // i is increased above
       compareSet.add(value);
       nCrement = nCrement + nX;
       j = nCrement;
 }
  
 ..........

// compareSet checks each group to see which is smallest then continues outer loop to get another group

我相信我已经找到了一种方法,可以根据组数是4还是其他来实现这一点

  i++ // in an outer loop

 .....................
 ArrayList compareSet = new ArrayList();
 int nCrement = 0;
 int nX = 4; // is 4 right now but could be something else
 for (int j = 0; j < listSet.size(); j++) {  
 String value = (String) listSet.get(i + nCrement);   // i is increased above
       compareSet.add(value);
       nCrement = nCrement + nX;
       j = nCrement;
 }
  
 ..........

// compareSet checks each group to see which is smallest then continues outer loop to get another group

对不起,你能澄清一下每个小组中最小的一个吗?起初我以为你在问如何知道这4个组中的每个组包含多少个元素,但现在我不确定你想问什么。尝试在algo broWhat逻辑中使用模,你用它将初始数组拆分为多个组吗?抱歉,但你能澄清一下,找到每个较小组中最小的一个吗?起初我认为你在问如何知道这4组中的每一组包含多少个元素,但现在我不确定你在问什么。试着在你的algo broWhat逻辑中使用模,你用它来将初始数组拆分为组吗?你的输出有一个例外行。不能将包含五个元素的数组拆分为四个大小相同的数组;它不会每次都是4,但我可以确定它是4还是其他值。那么,这是动态的吗?因为您正在静态设置4个子数组,所以它不起作用吗?只要target.length/numberOfArray是平滑整数,它就起作用。您的输出有一个异常行。不能将包含五个元素的数组拆分为四个大小相同的数组;它不会每次都是4,但我可以确定它是4还是其他值。这就是动力吗
c不起作用,因为您正在静态设置4个子数组?只要target.length/numberOfArray是平滑整数,它就可以工作。