מיזוג שני מערכים ב-Java דומה לשרשור או שילוב של שני מערכים באובייקט מערך אחד. עלינו למזג שני מערכים כך שרכיבי המערך ישמרו על הסדר המקורי שלהם במערך החדש שאוחד. האלמנטים של המערך הראשון קודמים לאלמנטים של המערך השני במערך החדש שאוחד. לדוגמה:
int[] arr1={1, 2, 3, 4, 5, 6}; //first array int[] arr2={7, 8, 9, 0}; //second array int[] arr3={1, 2, 3, 4, 5, 6, 7, 8, 9, 0} //resultant array
ישנן דרכים הבאות למיזוג שני מערכים:
- Java arraycopy() שיטה
- בלי להשתמש arraycopy() שיטה
- Java אוספים
- Java זרם ממשק API
שיטת Java arraycopy()
Java arraycopy() היא השיטה של מערכת כיתה ששייכת ל java.lang חֲבִילָה. הוא מעתיק מערך ממערך המקור שצוין למיקום המצוין של מערך היעד. מספר האלמנטים שהועתקו שווה לארגומנט האורך.
תחביר:
jtextfield
public static void arraycopy(Object source, int source_position, Object destination, int destination_position, int length)
פרמטרים
זה זורק NullPointerException אם מערך המקור או היעד הוא null. זה גם זורק ArrayIndexOutOfBoundsException if :
דוגמה לשיטת arraycopy()
בדוגמה הבאה, יצרנו שני מערכים שלמים firstArray ו secondArray . על מנת למזג שני מערכים, אנו מוצאים את אורכו ומאוחסנים במשתנה fal ו-sal בהתאמה. לאחר מכן, אנו יוצרים מערך שלמים חדש תוֹצָאָה המאחסן את סכום האורך של שני המערכים. כעת, העתק כל רכיב של שני המערכים למערך התוצאה על ידי שימוש arraycopy() פוּנקצִיָה.
import java.util.Arrays; public class MergeArrayExample1 { public static void main(String[] args) { int[] firstArray = {23,45,12,78,4,90,1}; //source array int[] secondArray = {77,11,45,88,32,56,3}; //destination array int fal = firstArray.length; //determines length of firstArray int sal = secondArray.length; //determines length of secondArray int[] result = new int[fal + sal]; //resultant array of size first array and second array System.arraycopy(firstArray, 0, result, 0, fal); System.arraycopy(secondArray, 0, result, fal, sal); System.out.println(Arrays.toString(result)); //prints the resultant array } }
תְפוּקָה:
מיון מערך ב-java
[23, 45, 12, 78, 4, 90, 1, 77, 11, 45, 88, 32, 56, 3]
בוא נראה דוגמה נוספת שבה ציינו את sore_array, destination, dest_position, מיקום מקור ואורך. אנו יכולים למזג מערך לפי המיקומים והאורך שצוינו.
דוגמא
import java.lang.*; public class MergeArrayExample2 { public static void main(String[] args) { int firstArray[] = { 11,22,33,44,55,98,76,54,60}; int secondArray[] = {66,77,88,99,22,67,21,90,80,70}; int source_arr[], sourcePos, dest_arr[], destPos, len; source_arr = firstArray; dest_arr = secondArray; sourcePos = 2; destPos = 4; len = 3; // Print elements of source System.out.print('source_array : '); for (int i = 0; i <firstarray.length; i++) system.out.print(firstarray[i] + ' '); system.out.println(''); system.out.println('sourcepos : sourcepos); print elements of destination system.out.print('dest_array for (int i="0;" < secondarray.length; system.out.print(secondarray[i] system.out.println('destpos destpos); system.out.println('len len); invoking arraycopy() method system.arraycopy(source_arr, sourcepos, dest_arr,destpos, after system.out.print('resultant array } pre> <p> <strong>Output:</strong> </p> <pre> source_array: 11 22 33 44 55 98 76 54 60 sourcePos: 2 dest_array: 66 77 88 99 22 67 21 90 80 70 destPos: 4 len: 3 Resultant array: 66 77 88 99 33 44 55 90 80 70 </pre> <h2>Without using arraycopy() method</h2> <p> <strong>Example of merging two arrays</strong> </p> <p>In the following example, we have initialized two arrays firstArray and secondArray of integer type. Manually copy the each element of both arrays to mergedArray and convert that array into String by using toString() method of Array class.</p> <pre> public class MergeArrayExample3 { public static void main(String[] args) { int[] firstArray = {56,78,90,32,67,12}; //initialized array int[] secondArray = {11,14,9,5,2,23,15}; int length = firstArray.length + secondArray.length; //add the length of firstArray into secondArray int[] mergedArray = new int[length]; //resultant array int pos = 0; for (int element : firstArray) //copying elements of secondArray using for-each loop { mergedArray[pos] = element; pos++; //increases position by 1 } for (int element : secondArray) //copying elements of firstArray using for-each loop { mergedArray[pos] = element; pos++; } System.out.println(Arrays.toString(mergedArray)); //prints the resultant array } } </pre> <p> <strong>Output:</strong> </p> <pre> [56, 78, 90, 32, 67, 12, 11, 14, 9, 5, 2, 23, 15] </pre> <h2>Using Collections</h2> <p> <strong>Example of merging two arrays in Java</strong> </p> <p>In the following example, we have initialized two arrays str1 and str2 of String type. After that we have created a list view of str1 by using the Arrays.asList() method. Now we have created the list view of str2 and added all the elements of str2 into the list. Again perform conversion from list to array and store the resultant array into str3 variable.</p> <pre> import java.util.*; public class MergeArrayExample4 { public static void main(String args[]) { String str1[] = { 'A', 'E', 'I' }; //source array String str2[] = { 'O', 'U' }; //destination array List list = new ArrayList(Arrays.asList(str1)); //returns a list view of an array //returns a list view of str2 and adds all elements of str2 into list list.addAll(Arrays.asList(str2)); Object[] str3 = list.toArray(); //converting list to array System.out.println(Arrays.toString(str3)); //prints the resultant array } } </pre> <p> <strong>Output:</strong> </p> <pre> [A, E, I, O, U] </pre> <h2>Java Stream API</h2> <p> <strong>Stream.of() method</strong> </p> <p>The <strong>Stream.of()</strong> method of Stream interface returns a sequential ordered stream whose elements are the values.</p> <p> <strong>Syntax</strong> </p> <pre> static Stream of(T....values) </pre> <p>Where M <strong>T</strong> is the type of stream elements. The method accepts <strong>values</strong> (elements of the new stream).</p> <p> <strong>flatMap() method</strong> </p> <p>The <strong>flatMap()</strong> method is the method of Stream interface. It returns a stream consisting of the result.</p> <p> <strong>Syntax</strong> </p> <pre> Stream flatMap(Function<? Super T, ? extends Stream> mapper) </pre> <p>Where <strong>R</strong> is the element type of new stream. The method accepts a <strong>mapper</strong> (a function to apply to each element which produces a stream of new values) as a parameter.</p> <p> <strong>toArray() method</strong> </p> <p>The <strong>toArray()</strong> method of Stream interface returns an array containing the elements of the stream.</p> <p> <strong>Syntax</strong> </p> <pre> Object[] toArray() </pre> <p> <strong>Example of merging two arrays using Stream API</strong> </p> <pre> import java.util.stream.Stream; import java.util.Arrays; import java.io.*; public class MergeArrayExample5 { // function to merge two arrays public static Object[] mergeArray(T[] arr1, T[] arr2) { return Stream.of(arr1, arr2).flatMap(Stream::of).toArray(); } public static void main (String[] args) { Integer[] firstArray = new Integer[]{13,12,11,6,9,3}; //source array Integer[] secondArray = new Integer[]{78,34,56,67,2,11,7}; //destination array Object[] mergedArray = mergeArray(firstArray,secondArray); //merged array System.out.println('Merged array: '+ Arrays.toString(mergedArray)); } } </pre> <p> <strong>Output:</strong> </p> <pre> Merged array: [13, 12, 11, 6, 9, 3, 78, 34, 56, 67, 2, 11, 7] </pre> <hr></firstarray.length;>
בלי להשתמש בשיטת arraycopy()
דוגמה למיזוג שני מערכים
בדוגמה הבאה, אתחלנו שני מערכים firstArray ו-secondArray מסוג מספר שלם. העתק ידנית את כל רכיב של שני המערכים ל-mergedArray והמר את המערך הזה ל-String באמצעות שיטת toString() של המחלקה Array.
public class MergeArrayExample3 { public static void main(String[] args) { int[] firstArray = {56,78,90,32,67,12}; //initialized array int[] secondArray = {11,14,9,5,2,23,15}; int length = firstArray.length + secondArray.length; //add the length of firstArray into secondArray int[] mergedArray = new int[length]; //resultant array int pos = 0; for (int element : firstArray) //copying elements of secondArray using for-each loop { mergedArray[pos] = element; pos++; //increases position by 1 } for (int element : secondArray) //copying elements of firstArray using for-each loop { mergedArray[pos] = element; pos++; } System.out.println(Arrays.toString(mergedArray)); //prints the resultant array } }
תְפוּקָה:
vlc הורדת סרטונים מיוטיוב
[56, 78, 90, 32, 67, 12, 11, 14, 9, 5, 2, 23, 15]
שימוש באוספים
דוגמה למיזוג שני מערכים ב-Java
בדוגמה הבאה, אתחלנו שני מערכים str1 ו-str2 מסוג String. לאחר מכן יצרנו תצוגת רשימה של str1 על ידי שימוש בשיטת Arrays.asList() . כעת יצרנו את תצוגת הרשימה של str2 והוספנו את כל האלמנטים של str2 לרשימה. שוב בצע המרה מרשימה למערך ואחסן את המערך שנוצר במשתנה str3.
import java.util.*; public class MergeArrayExample4 { public static void main(String args[]) { String str1[] = { 'A', 'E', 'I' }; //source array String str2[] = { 'O', 'U' }; //destination array List list = new ArrayList(Arrays.asList(str1)); //returns a list view of an array //returns a list view of str2 and adds all elements of str2 into list list.addAll(Arrays.asList(str2)); Object[] str3 = list.toArray(); //converting list to array System.out.println(Arrays.toString(str3)); //prints the resultant array } }
תְפוּקָה:
[A, E, I, O, U]
Java Stream API
שיטת Stream.of().
ה זרם של() שיטת ממשק Stream מחזירה זרם מסודר ברצף שהאלמנטים שלו הם הערכים.
תחביר
static Stream of(T....values)
איפה מ ט הוא סוג של רכיבי זרם. השיטה מקבלת ערכים (אלמנטים של הזרם החדש).
שיטת flatMap().
ה flatMap() שיטה היא השיטה של ממשק Stream. זה מחזיר זרם המורכב מהתוצאה.
ההבדל בין תוכנית לתסריט
תחביר
Stream flatMap(Function<? Super T, ? extends Stream> mapper)
איפה ר הוא סוג האלמנט של זרם חדש. השיטה מקבלת א ממפה (פונקציה ליישום על כל אלמנט אשר מייצרת זרם של ערכים חדשים) כפרמטר.
עדכן ב-sql עם join
שיטת toArray().
ה toArray() שיטת ממשק Stream מחזירה מערך המכיל את רכיבי הזרם.
תחביר
Object[] toArray()
דוגמה למיזוג שני מערכים באמצעות Stream API
import java.util.stream.Stream; import java.util.Arrays; import java.io.*; public class MergeArrayExample5 { // function to merge two arrays public static Object[] mergeArray(T[] arr1, T[] arr2) { return Stream.of(arr1, arr2).flatMap(Stream::of).toArray(); } public static void main (String[] args) { Integer[] firstArray = new Integer[]{13,12,11,6,9,3}; //source array Integer[] secondArray = new Integer[]{78,34,56,67,2,11,7}; //destination array Object[] mergedArray = mergeArray(firstArray,secondArray); //merged array System.out.println('Merged array: '+ Arrays.toString(mergedArray)); } }
תְפוּקָה:
Merged array: [13, 12, 11, 6, 9, 3, 78, 34, 56, 67, 2, 11, 7]