Saya mencoba membagi array menjadi ukuran potongan tertentu. Saya telah menemukan solusinya tetapi bisakah ini dibuat lebih sederhana.

pemrograman


Mengingat array dan chunkSize. Saya harus menghasilkan keluaran yang diinginkan
susunan = [1,2,3,4,5]

Ukuran potongan = 1
keluaran yang diinginkan [1] [2] [3] [4] [5]

Apa yang saya coba:

Saya telah mencoba menggunakan IntStream

Jawa
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
    }

Panggilan fungsi yang saya lakukan dalam metode utama sebagai:
Daftar daftar = potongan(asli, splitSize);
list.forEach(splitArray -> System.out.println(Arrays.toString(splitArray)));

Solusi 1

Mungkin ada banyak cara untuk melakukannya. Jika tidak ada masalah ruang, saya lebih suka Arrays.copyOfRange()

Di dalamnya, copyOfRange() membuat array baru dengan tipe yang sama dengan array asli, dan berisi item dari rentang tertentu dari array asli ke dalam array baru.

Sintaksis:

Jawa
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

Keterangan lebih lanjut: Metode Java.util.Arrays.copyOfRange()[^]

Contoh penggunaan:

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

Solusi 2

/****************************************************** *****************************
Selamat datang di GDB Online.
Kode, Kompilasi, Jalankan, dan Debug online dari mana saja di dunia.
******************************************************* *****************************/
import java.util.*;

kelas Utama
{
public static void main(String[] argumen) {
ke dalam[] asal = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10};
int splitUkuran = 3;

/* Hasil yang diharapkan
[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9]

*/

Daftar daftar = splitArray(asli, splitSize);
list.forEach(splitArray -> System.out.println(Arrays.toString(splitArray)));
}

Daftar statis publik splitArray(int[] array, int ukuran terpisah) {
ke dalam k=0;
Daftar Array hasil=Daftar Array baru();
ke dalam[] arr=batal;
int panjang=array.panjang;
int ukuran=ukuran terpisah;
for(int i=0;i ” arr = “baru” ke dalam[size];
=”” }
= “” arr[k]= “susunan[i];
“k++;
=””>=Ukuran terpisah || i==array.panjang-1 ){
k=0;
hasil.tambahkan(arr);
panjang=panjang-splitUkuran;
jika(panjang

コメント

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