המרת מערך פרימיטיבי לרשימה

1. סקירה כללית

במדריך הקצר הזה, נראה כיצד להמיר מערך של פרימיטיבים ל- a רשימה של אובייקטים מהסוג המקביל. בדרך כלל, אנו עשויים לנסות להשתמש בתיבה אוטומטית ב- Java. עם זאת, כפי שנראה בסעיף הבא, לעתים קרובות האינטואיציה שלנו לאופן שבו פועלת תיבת אוטומטית עשויה להיות שגויה.

2. בעיה

נתחיל מהגדרת הבעיה. יש לנו מגוון פרימיטיבים (int []), ואנחנו רוצים להמיר מערך זה ל- רשימה (רשימה). ניסיון ראשון אינטואיטיבי יכול להיות:

int [] קלט = int חדש [] {1,2,3,4}; פלט רשימה = Arrays.asList (קלט);

למרבה הצער, זה לא יתקבץ בגלל אי ​​התאמה בין סוגים. אנו עשויים לצפות כי תיבות אוטומטיות יעבדו עם מערכים של פרימיטיבים. עם זאת, אמונה אינסטינקטיבית זו אינה נכונה.

רישום אוטומטי מתרחש רק עבור אלמנט יחיד (למשל מ int ל מספר שלם). אין המרה אוטומטית ממערך של סוגים פרימיטיביים למערך של סוגי ההתייחסות שלהם (למשל מ- int [] ל מספר שלם[]).

נתחיל ליישם כמה פתרונות לבעיה זו.

3. איטרציה

מכיוון שרישום אוטומטי פועל עם אלמנטים פרימיטיביים בודדים, פיתרון פשוט הוא פשוט לחזור על אלמנטים של המערך ולהוסיף אותם ל רשימה אחד אחד:

int [] קלט = int int [] {1,2,3,4}; פלט רשימה = ArrayList חדש (); עבור (ערך int: קלט) {output.add (ערך); }

פתרנו את הבעיה, אך הפיתרון הוא די מילולי. זה מביא אותנו ליישום הבא.

4. זרמים

מאז Java 8, אנו יכולים להשתמש ב- זרם ממשק API. אנו יכולים לספק פתרון בשורה אחת באמצעות זרם:

int [] קלט = int חדש [] {1,2,3,4}; פלט רשימה = Arrays.stream (קלט) .boxed (). Collect (Collectors.toList ());

לחלופין, נוכל להשתמש IntStream:

int [] קלט = int חדש [] {1,2,3,4}; פלט רשימה = IntStream.of (קלט) .boxed (). Collect (Collectors.toList ());

זה בהחלט נראה הרבה יותר נחמד. לאחר מכן, נסתכל על כמה ספריות חיצוניות.

5. גויאבה

ספריית גויאבה מספקת עטיפה סביב בעיה זו. נתחיל בהוספת תלות Maven:

 com.google.guava חבילה גויאבה 29.0-jre 

אנחנו יכולים להשתמש Ints.asList (), עם מחלקות שירות דומות לסוגים הפרימיטיביים האחרים:

int [] קלט = int חדש [] {1,2,3,4}; פלט רשימה = Ints.asList (קלט);

6. אפאצ'י קומונס

ספרייה נוספת היא Apache Commons Lang. שוב, בואו נוסיף את התלות של Maven עבור ספרייה זו:

 org.apache.commons commons-lang3 3.10 

ליתר דיוק, אנו משתמשים ב- ArrayUtils מעמד:

int [] קלט = int int [] {1,2,3,4}; מספר שלם [] outputBoxed = ArrayUtils.toObject (קלט); פלט רשימה = Arrays.asList (outputBoxed);

7. מסקנה

כעת יש לנו כמה אפשרויות בארגז הכלים שלנו להמיר מערך של פרימיטיבים ל- a רשימה. כפי שראינו, רישום אוטומטי מתרחש רק עבור אלמנטים בודדים. במדריך זה ראינו כמה פתרונות ליישום ההמרה.

כמו תמיד, קוד המקור המלא של המאמר זמין באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found