Πώς μετατρέπω έναν πίνακα σε λίστα στη Java;
Χρησιμοποίησα την Arrays.asList()
αλλά η συμπεριφορά (και η υπογραφή) κάπως άλλαξε από την Java SE 1.4.2 (τα έγγραφα τώρα στο αρχείο) στην 8 και τα περισσότερα αποσπάσματα που βρήκα στο διαδίκτυο χρησιμοποιούν τη συμπεριφορά της 1.4.2.
Για παράδειγμα:
int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
Σε πολλές περιπτώσεις θα πρέπει να είναι εύκολο να εντοπιστεί, αλλά μερικές φορές μπορεί να γλιστρήσει απαρατήρητο:
Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
Στο παράδειγμά σας, αυτό συμβαίνει επειδή δεν μπορείτε να έχετε μια λίστα ενός πρωτόγονου τύπου. Με άλλα λόγια, η List<int>
δεν είναι δυνατή.
Μπορείτε, ωστόσο, να έχετε μια List<Integer>
χρησιμοποιώντας την κλάση Integer
που περιτυλίγει το primitive int
. Μετατρέψτε τον πίνακα σας σε List
με τη βοηθητική μέθοδο Arrays.asList
.
Integer[] spam = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(spam);
Δείτε αυτόν τον κώδικα που εκτελείται ζωντανά στο IdeOne.com.
Το πρόβλημα είναι ότι τα varargs εισήχθησαν στη Java5 και δυστυχώς, η Arrays.asList()
υπερφορτώθηκε με μια έκδοση vararg επίσης. Έτσι, η Arrays.asList(spam)
εκλαμβάνεται από τον μεταγλωττιστή της Java5 ως παράμετρος vararg των int arrays.
Αυτό το πρόβλημα εξηγείται με περισσότερες λεπτομέρειες στο Effective Java 2nd Ed., Κεφάλαιο 7, σημείο 42.
θα πρέπει να ρίξετε σε συστοιχία
Arrays.asList((Object[]) array)