J’essaie de diviser le tableau en tailles de morceaux données. J’ai trouvé une solution mais cela peut-il être rendu plus simple.

la programmation


Étant donné le tableau et chunkSize. Je dois produire le résultat souhaité
tableau = [1,2,3,4,5]

taille du morceau = 1
Sortie désirée [1] [2] [3] [4] [5]

Ce que j’ai essayé :

J’ai essayé d’utiliser IntStream

Java
public static List<int[]> chunk(int[] input, int chunkSize) {
        return IntStream.iterate(0, i -> i + chunkSize)
                .limit((long) Math.ceil((double) input.length / chunkSize))
                .mapToObj(j -> Arrays.copyOfRange(input, j, j + chunkSize > input.length ? input.length : j + chunkSize))
                .collect(Collectors.toList());//how to fix this line error on new
    }

L’appel de fonction que je fais dans la méthode principale comme :
Liste list = chunk(original, splitSize);
list.forEach(splitArray -> System.out.println(Arrays.toString(splitArray)));

Solution 1

Il pourrait y avoir plusieurs façons de procéder. S’il n’y a pas de problème de place, je préférerais Arrays.copyOfRange()

Dans celui-ci, le copyOfRange() crée un nouveau tableau du même type que le tableau d’origine et contient les éléments de la plage spécifiée du tableau d’origine dans un nouveau tableau.

Syntaxe:

Java
public static T[] copyOfRange(T[] original, int from, int to)

// original – the array from which a range is to be copied
// from – the initial index of the range to be copied, inclusive
// to – the final index of the range to be copied, exclusive

Plus de détails: Méthode Java.util.Arrays.copyOfRange()[^]

Exemple d’utilisation :

Java
int[] arr1 = new int[] {15, 10, 45, 55};
int chunk = 2; // provided as input
for(int i=0; i<arr1.length; i+=chunk){
    System.out.println(Arrays.toString(Arrays.copyOfRange(arr1, i, Math.min(arr1.length,i+chunk))));
}

Solution 2

/*************************************************** *****************************
Bienvenue sur GDB en ligne.
Codez, compilez, exécutez et déboguez en ligne depuis n’importe où dans le monde.
************************************************** ****************************/
importer java.util.* ;

classe principale
{
public static void main(Chaîne[] arguments) {
int[] original = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10} ;
int splitSize = 3;

/* production attendue
[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9]

*/

Liste liste = splitArray (original, splitSize);
list.forEach(splitArray -> System.out.println(Arrays.toString(splitArray)));
}

Liste statique publique splitArray(int[] tableau, int splitSize) {
entier k=0 ;
ArrayList résultat=nouveau ArrayList();
int[] arr=nul ;
int longueur = tableau.longueur;
int taille=splitSize;
pour(int i=0;i ” arr=”nouveau” int[size];
= “” }
= “” arr[k]=”tableau[i];
“k++;
=””>=splitTaille || je==array.length-1 ){
k = 0 ;
result.add(arr);
longueur = longueur-splitSize ;
si (longueur

コメント

タイトルとURLをコピーしました