המרת מערך פרימיטיבי לרשימה
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.