أحاول تقسيم المصفوفة إلى حجم قطعة معين. لقد توصلت إلى حل ولكن هل يمكن جعل هذا الأمر أكثر بساطة.


نظرا للصفيف وchunkSize. لا بد لي من إنتاج الإخراج المطلوب
صفيف = [1,2,3,4,5]

حجم القطعة = 1
النتيجة المرجوة [1] [2] [3] [4] [5]

ما حاولت:

لقد حاولت استخدام IntStream

جافا
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 = Chunk(Original, SplitSize);
list.forEach(splitArray -> System.out.println(Arrays.toString(splitArray)));

الحل 1

يمكن أن تكون هناك طرق متعددة للقيام بذلك. إذا لم تكن هناك مسألة المساحة، فأنا أفضل ذلك Arrays.copyOfRange()

فيه، copyOfRange() ينشئ مصفوفة جديدة من نفس نوع المصفوفة الأصلية، ويحتوي على عناصر النطاق المحدد للمصفوفة الأصلية في مصفوفة جديدة.

بناء الجملة:

جافا
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()[^]

مثال على الاستخدام:

جافا
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))));
}

الحل 2

/****************************************************** *****************************
مرحبا بكم في جي دي بي أون لاين.
البرمجة والترجمة والتشغيل والتصحيح عبر الإنترنت من أي مكان في العالم.
*************************************************************************************************************************************************************************** ********************************/
import java.util.*;

الطبقة الرئيسية
{
الفراغ العام الثابت الرئيسي (String[] الحجج) {
كثافة العمليات[] الأصلي = {0، 1، 2، 3، 4، 5، 6، 7، 8، 9،10}؛
حجم الانقسام = 3؛

/* الناتج المتوقع
[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9]

*/

قائمة<كثافة العمليات[]> list = SplitArray(original, SplitSize);
list.forEach(splitArray -> System.out.println(Arrays.toString(splitArray)));
}

القائمة الثابتة العامة سبليتأري (int[] صفيف، حجم الانقسام int) {
كثافة العمليات ك = 0؛
قائمة المصفوفات نتيجة = قائمة صفيف جديدة ();
كثافة العمليات[] arr=null;
int length=array.length;
int size=splitSize;
for(int i=0;i ” آر = “جديد” كثافةت[size];
=”” }
=”” آر[k]= “صفيف[i];
” ك++؛
=””>=حجم الانقسام || أنا==صفيف.طول-1){
ك=0;
result.add(arr);
length=length-splitSize;
إذا (الطول

コメント

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