Mai mult
Conversia matrice pentru a lista în Java
Cum pot converti o matrice la o listă în Java?
Am folosit Tablouri.asList()
dar comportamentul (și semnătura) schimbat într-un fel de Java SE 1.4.2 (docs acum în arhiva) pentru a 8 și de cele mai multe fragmente-am gasit pe web folosi 1.4.2 comportament.
De exemplu:
int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
- pe 1.4.2 returnează o listă care conține elementele 1, 2, 3
- pe 1.5.0+ returnează o listă cu matrice spam
În multe cazuri, ar trebui să fie ușor de detectat, dar uneori se pot strecura neobservat:
Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
948
18
În exemplu, aceasta este pentru că poți't au o Listă de un tip primitiv. Cu alte cuvinte,
Listă<int>
nu este posibil.Cu toate acestea, puteți avea o Listă
folosind [
Integer][1] clasă care înfășoară
intprimitive. Converti matrice la o [
Lista][2] cu [
Arrays.asList`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Arrays.html#asList(T...)) utilitatea metodei.Vezi asta cod rula direct de la IdeOne.com.
În Java 8, puteți utiliza fluxuri:
Vorbind despre conversie fel, depinde de ce ai nevoie de dumneavoastră "Lista". Dacă aveți nevoie de ea doar pentru a citi date. BINE, aici te duci:
Dar apoi, dacă faci ceva de genul asta:
ai java.lang.UnsupportedOperationException`. Deci, pentru unele cazuri, chiar ai nevoie de asta:
Prima abordare, de fapt, nu se transforma în matrice, dar 'reprezintă' ca pe o "Listă". Dar matricea este sub capota, cu toate proprietățile sale ca număr fix de elemente. Vă rugăm să rețineți că trebuie să specificați tipul de la construirea
ArrayList
.Problema este că varargs fost introdus în Java5 și, din păcate,
Matrice.asList()
s-au supraîncărcat cu o vararg versiune prea. Atât De Tablouri.asList(spam) e de înțeles de către Java5 compilator ca un vararg parametru de int matrice.Această problemă este explicat în mai multe detalii în Java 2nd Ed., Capitolul 7, Punctul 42.
Se pare cam târziu, dar aici sunt cei doi cenți ai mei. Nu putem avea o Listă " ca " int
este un tip primitiv deci putem avea doar Lista<Integer>
.Java 8 (int matrice)
Java 8 și mai jos (Integer array)
Trebuie ArrayList și nu Lista?
În cazul în care ne dorim o aplicare specifică a
Lista
de exempluArrayList atunci putem folosi
toCollection` ca:De ce
list21
nu poate fi modificat structural?Când ne-am folosi Tablouri.asList
dimensiunea din lista returnată este fix deoarece lista returnat nu este java.util.ArrayList, dar un privat static de clasă definite în java.util.Tablouri
. Deci, dacă am adăuga sau elimina elemente din lista returnată, oUnsupportedOperationException
va fi aruncat. Deci, ar trebui să mergem cu list22 când vrem să modifice lista. Dacă avem Java8, atunci putem, de asemenea, du-te cu list23`.Să fie clar
list21
poate fi modificat în sensul că putem numi list21.set(index,element)` dar această listă nu poate fi modificat structural, adică nu se pot adăuga sau elimina elemente din lista. Puteți verifica, de asemenea, acest întrebare.Dacă vrem o lista imuabil, atunci putem încheia ca:
Un alt punct de remarcat este faptul că metoda Colecțiilor.unmodifiableList` returnează o unmodifiable vedere lista specificată. O unmodifiable view collection este o colectie care este unmodifiable și este, de asemenea, o vedere pe un suport de colectare. Rețineți că modificările aduse suport de colectare ar putea fi încă posibil, iar dacă acestea apar, ele sunt vizibile prin unmodifiable vedere.
Putem avea un adevărat lista imuabil în Java 10.
Java 10 (Adevărat lista Imuabil) în două moduri:
Lista.copyOf(Tablouri.asList(numere întregi))
Tablouri.stream(numere întregi).colecta(Colectoare.toUnmodifiableList());
De asemenea, a verifica acest lucru răspunde de-a mea pentru mai multe.
Am avut recent pentru a converti o matrice la o Listă. Mai târziu, pe programul filtrează lista încercarea de a elimina datele. Atunci când utilizați Tablouri.asList(array) funcția, puteți crea o dimensiune fixă de colectare: puteți adăuga și nici nu șterge. Această intrare a explica problema mai bine decât mine: https://stackoverflow.com/questions/2965747/why-i-get-unsupportedoperationexception-when-trying-to-remove-from-the-list.
În final, am avut de a face o "manual" conversie:
Presupun că aș putea fi adăugat de conversie dintr-o matrice pentru o listă utilizând o Listă.addAll(elemente) de funcționare.
Chiar și mai scurt:
Folosind Tablouri
Acesta este cel mai simplu mod de a converti o serie de "Listă". Cu toate acestea, dacă încercați să adăugați un element nou sau elimina un element existent din listă, o
UnsupportedOperationException
va fi aruncat.Folosind ArrayList sau Altă Listă de Implementări
Puteți utiliza un "pentru" buclă pentru a adăuga toate elementele de matrice într-o "Listă" de punere în aplicare, de exemplu,
ArrayList
:Folosind Stream API în Java 8
Puteți activa matrice într-un flux, apoi se colectează stream folosind diferite colectoare: implicit colector în Java 8 folosesc ArrayList` în spatele ecranului, dar poate impune, de asemenea, preferate în aplicare.
Vezi de asemenea și:
În Java 9-ai avea chiar și o soluție mai elegantă de a folosi imuabil liste prin intermediul noului confort metoda fabrica
Lista.a
:(nerușinare copiate de aici )
Dacă vă sunt de orientare Java 8 (sau mai târziu), puteți să încercați acest lucru:
NOTĂ:
Acorde o atenție la
Colectoare.<Integer>toList()
, această metodă generică vă ajută să evitați eroare "nepotrivire de Tip: nu se poate converti din Lista " la " Lista`".O altă soluție dacă utilizați apache commons-lang:
În Cazul În Care ArrayUtils.toObject convertește
int [] " la " Integer[]
Integer[] tablou = { 1, 2, 3}; Listă list = Liste.newArrayList(sourceArray);
Integer[] tablou = { 1, 2, 3}; Listă list = new ArrayList<>(6); CollectionUtils.addAll(lista, matrice);
trebuie să arunce în matrice
O-liner:
Dacă acest lucru ajută: am'am avut aceeași problemă și pur și simplu a scris un generic funcție care ia o matrice și returnează un ArrayList de același tip și cu același conținut:
Având În Vedere Matrice:
Conversia tablou întreg la Întreg Lista
Un singur drum: cutie() -> returnează IntStream
A doua Cale: harta fiecare element de flux la număr Întreg și apoi a se colecta
NOTĂ: Folosind mapToObj puteti sub acoperire int fiecare element în șir stream, char flux etc de carcasa am să (char)i
Conversia O matrice de Tip la un Alt Tip de Exemplu:
Deci depinde de ce versiune de Java ai incercat
Java 7
SAU
SAU
În Java 8
Referință - http://www.codingeek.com/java/how-to-convert-array-to-list-in-java/
utilizarea a două linii de cod pentru a converti o matrice, listă, dacă îl folosiți în valoare întreagă trebuie să utilizați autoboxing tip de date primitive de tip