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);
Comentarii la întrebare (6)
Soluția

Î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.

Integer[] spam = new Integer[] { 1, 2, 3 };
List list = Arrays.asList(spam);

Vezi asta cod rula direct de la IdeOne.com.

Comentarii (16)

În Java 8, puteți utiliza fluxuri:

int[] spam = new int[] { 1, 2, 3 };
Arrays.stream(spam)
      .boxed()
      .collect(Collectors.toList());
Comentarii (0)

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:

Integer[] values = { 1, 3, 7 };
List list = Arrays.asList(values);

Dar apoi, dacă faci ceva de genul asta:

list.add(1);

ai java.lang.UnsupportedOperationException`. Deci, pentru unele cazuri, chiar ai nevoie de asta:

Integer[] values = { 1, 3, 7 };
List list = new ArrayList(Arrays.asList(values));

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.

Comentarii (1)

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.

Comentarii (2)

Se pare cam târziu, dar aici sunt cei doi cenți ai mei. Nu putem avea o Listă " ca " inteste un tip primitiv deci putem avea doar Lista<Integer>.

Java 8 (int matrice)

int[] ints = new int[] {1,2,3,4,5};
List list11 =Arrays.stream(ints).boxed().collect(Collectors.toList()); 

Java 8 și mai jos (Integer array)

Integer[] integers = new Integer[] {1,2,3,4,5};
List list21 =  Arrays.asList(integers); // returns a fixed-size list backed by the specified array.
List list22 = new ArrayList(Arrays.asList(integers)); // good
List list23 = Arrays.stream(integers).collect(Collectors.toList()); //Java 8 only

Trebuie ArrayList și nu Lista?

În cazul în care ne dorim o aplicare specifică a Lista de exemplu ArrayList atunci putem folositoCollection` ca:

ArrayList list24 = Arrays.stream(integers)
                          .collect(Collectors.toCollection(ArrayList::new));

De ce list21 nu poate fi modificat structural?

Când ne-am folosi Tablouri.asListdimensiunea 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ă, o UnsupportedOperationException 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:

List list 22 = Collections.unmodifiableList(Arrays.asList(integers));

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:

  1. Lista.copyOf(Tablouri.asList(numere întregi))
  2. Tablouri.stream(numere întregi).colecta(Colectoare.toUnmodifiableList());

De asemenea, a verifica acest lucru răspunde de-a mea pentru mai multe.

Comentarii (3)

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:

    List items = new ArrayList();
    for (ListItem item: itemsArray) {
        items.add(item);
    }

Presupun că aș putea fi adăugat de conversie dintr-o matrice pentru o listă utilizând o Listă.addAll(elemente) de funcționare.

Comentarii (4)

Chiar și mai scurt:

List list = Arrays.asList(1, 2, 3, 4);
Comentarii (0)

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.

Integer[] existingArray = {1, 2, 3};
List list1 = Arrays.asList(existingArray);
List list2 = Arrays.asList(1, 2, 3);

// WARNING:
list2.add(1);     // Unsupported operation!
list2.remove(1);  // Unsupported operation!

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:

List list = new ArrayList();
for (int i : new int[]{1, 2, 3}) {
  list.add(i);
}

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.

List list1, list2, list3;
list1 = Stream.of(1, 2, 3).collect(Collectors.toList());
list2 = Stream.of(1, 2, 3).collect(Collectors.toCollection(ArrayList::new));
list3 = Stream.of(1, 2, 3).collect(Collectors.toCollection(LinkedList::new));

Vezi de asemenea și:

Comentarii (0)

Î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:

List immutableList = List.of("one","two","three");

(nerușinare copiate de aici )

Comentarii (1)

Dacă vă sunt de orientare Java 8 (sau mai târziu), puteți să încercați acest lucru:

int[] numbers = new int[] {1, 2, 3, 4};
List integers = Arrays.stream(numbers)
                        .boxed().collect(Collectors.toList());

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`".

Comentarii (0)

O altă soluție dacă utilizați apache commons-lang:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(ArrayUtils.toObject(spam));

În Cazul În Care ArrayUtils.toObject convertește int [] " la " Integer[]

Comentarii (0)
  1. Folosind Guava:

Integer[] tablou = { 1, 2, 3}; Listă list = Liste.newArrayList(sourceArray);

  1. Folosind Apache Commons Colecții:

Integer[] tablou = { 1, 2, 3}; Listă list = new ArrayList<>(6); CollectionUtils.addAll(lista, matrice);

Comentarii (0)

trebuie să arunce în matrice

Arrays.asList((Object[]) array)
Comentarii (2)

O-liner:

List list = Arrays.asList(new Integer[] {1, 2, 3, 4});
Comentarii (0)

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:

public static  ArrayList ArrayToArrayList(T[] array) {
    ArrayList list = new ArrayList();
    for(T elmt : array) list.add(elmt);
    return list;
}
Comentarii (1)

Având În Vedere Matrice:

    int[] givenArray = {2,2,3,3,4,5};

Conversia tablou întreg la Întreg Lista

Un singur drum: cutie() -> returnează IntStream

    List givenIntArray1 = Arrays.stream(givenArray)
                                  .boxed()
                                  .collect(Collectors.toList());

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

    List givenIntArray2 = Arrays.stream(givenArray)
                                         .mapToObj(i->i)
                                         .collect(Collectors.toList());

Conversia O matrice de Tip la un Alt Tip de Exemplu:

List givenIntArray2 = Arrays.stream(givenArray)
                                             .mapToObj(i->(char)i)
                                             .collect(Collectors.toList());
Comentarii (0)

Deci depinde de ce versiune de Java ai incercat

Java 7

 Arrays.asList(1, 2, 3);

SAU

       final String arr[] = new String[] { "G", "E", "E", "K" };
       final List initialList = new ArrayList() {{
           add("C");
           add("O");
           add("D");
           add("I");
           add("N");
       }};

       // Elements of the array are appended at the end
       Collections.addAll(initialList, arr);

SAU

Integer[] arr = new Integer[] { 1, 2, 3 };
Arrays.asList(arr);

În Java 8

int[] num = new int[] {1, 2, 3};
List list = Arrays.stream(num)
                        .boxed().collect(Collectors.toList())

Referință - http://www.codingeek.com/java/how-to-convert-array-to-list-in-java/

Comentarii (0)

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

  Integer [] arr={1,2};
  Arrays.asList(arr);
Comentarii (0)