【解決方法】配列を特定のチャンクサイズに分割しようとしています。 私は解決策を思いつきましたが、これをもっと簡単にすることはできますか?


配列とchunkSizeが与えられます。 目的の出力を生成する必要があります
配列 = [1,2,3,4,5]

チャンクサイズ = 1
希望の出力 [1] [2] [3] [4] [5]

私が試したこと:

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
    }

私がメインメソッドで行っている関数呼び出しは次のとおりです。
List リスト = チャンク (オリジナル、分割サイズ);
list.forEach(splitArray -> System.out.println(Arrays.toString(splitArray)));

解決策 1

それを行う方法は複数ある可能性があります。 スペースの問題がなければ、私はそれを好む Arrays.copyOfRange()

その中で、 copyOfRange() 元の配列と同じ型の新しい配列を作成し、元の配列の指定された範囲の項目を新しい配列に含めます。

構文:

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

詳細: Java.util.Arrays.copyOfRange() メソッド[^]

使用例:

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))));
}

コメント

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