Inizializzazione di una matrice in una riga


2757

Volevo creare un elenco di opzioni a scopo di test. All'inizio ho fatto questo:

ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");

Quindi, ho riformattato il codice come segue:

ArrayList<String> places = new ArrayList<String>(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

C'è un modo migliore per farlo?


34
Se questo è destinato al test unitario, prova a eseguire un'oscillazione. È possibile scrivere il codice di test al suo interno durante il test del codice java e utilizzareArrasyList<String> places = ["Buenos Aires", "Córdoba", "La Plata"]
ripper234 il

3
In Java SE 7, è possibile sostituire il tipo con parametri del costruttore con un set vuoto di parametri di tipo (<>): Mappa <Stringa, Elenco <String>> myMap = new HashMap <> ();
Rose,


2
usa l'inizializzazione con doppio controvento :)
Mohammadreza Khatami,

8
Stream.of ("val1", "val2"). Collect (Collectors.toList ()); // crea ArrayList, soluzione Java8.
torina,

Risposte:


2025

In realtà, probabilmente il modo "migliore" per inizializzare ArrayListè il metodo che hai scritto, in quanto non è necessario crearne uno nuovo Listin alcun modo:

ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");

Il problema è che è necessario un po 'di digitazione per fare riferimento a listquell'istanza.

Esistono alternative, come creare una classe interna anonima con un inizializzatore di istanza (noto anche come "inizializzazione a doppia parentesi graffa"):

ArrayList<String> list = new ArrayList<String>() {{
    add("A");
    add("B");
    add("C");
}};

Tuttavia, non sono troppo affezionato a quel metodo perché quello che finisci con una sottoclasse ArrayListha un inizializzatore di istanza e quella classe viene creata solo per creare un oggetto, che a me sembra un po 'eccessivo.

Ciò che sarebbe stato bello se fosse stata accettata la proposta di Collection Literals per Project Coin (era prevista per essere introdotta in Java 7, ma probabilmente non farà parte di Java 8):

List<String> list = ["A", "B", "C"];

Sfortunatamente non ti aiuterà qui, poiché inizializzerà un immutabile Listpiuttosto che un ArrayListe, inoltre, non è ancora disponibile, se mai lo sarà.


172
Vedere stackoverflow.com/questions/924285 per ulteriori informazioni sull'inizializzazione, i pro e i contro del doppio controvento.
Eddie,

6
@Eddie: buona chiamata per il collegamento: una frase sull'inizializzazione a doppia parentesi non è sufficiente per descriverla in modo completo.
coobird,

2
Funziona solo se non fai affidamento sull'elenco di boxe automatica <Double> list = [1.0, 2.0, 3.0]; non riesce.
Richard B,

1
Ti manca un punto e virgola sull'inizializzazione della doppia lista
Don Larynx,

6
Poiché questa risposta è la moneta di progetto più votata e menzionata, penso che dovresti chiamare quel java 9 fornito con la sintassi List.of (...): docs.oracle.com/javase/9/docs/api/java/util/ List.html # of-E ...-
Asaf

2155

Sarebbe più semplice se tu lo dichiarassi semplicemente come List- deve essere un ArrayList?

List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");

O se hai un solo elemento:

List<String> places = Collections.singletonList("Buenos Aires");

Ciò significherebbe quello places è immutabile (provare a cambiarlo provocherà UnsupportedOperationExceptionun'eccezione).

Per creare un elenco mutabile che sia concreto ArrayList, puoi crearne uno ArrayListdall'elenco immutabile:

ArrayList<String> places = new ArrayList<>(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

18
@Marcase: non puoi cambiare la tua classe per usare un Elenco invece di ArrayList?
Lawrence Dol,

74
Secondo la mia risposta, se non stai usando metodi specifici per ArrayList, sarebbe meglio progettare cambiare la dichiarazione in List. Specifica le interfacce, non le implementazioni.
Christoffer Hammarström,

9
@Christoffer Hammarström: se cambia la dichiarazione in Elenco e utilizza l' elenco <String> places = Arrays.asList (...); egli non sarà in grado di utilizzare places.add ( "blabla")
Maks

57
Per essere chiari, asList(...)restituisce una dimensione fissa Listche esplode in operazioni di mutamento come removee clear, cose che il Listcontratto sostiene di supportare. Anche se hai lasciato la dichiarazione come List, devi necessariamente usare List l = new ArrayList(asList(...))per ottenere un oggetto che non generi eccezioni OperationNotSupported. Principio di sostituzione Liskov qualcuno?
Splash

5
@Splash: removee clearsono operazioni opzionali in List, quindi asList(...)segue il contratto. Da nessuna parte l'OP afferma che ha bisogno di aggiungere più elementi in seguito, l'esempio è solo di un Listche deve essere inizializzato con tre elementi.
Christoffer Hammarström,

872

La semplice risposta

In Java 9 o versioni successive, dopo è List.of()stato aggiunto:

List<String> strings = List.of("foo", "bar", "baz");

Con Java 10 o versioni successive, questo può essere abbreviato con la varparola chiave.

var strings = List.of("foo", "bar", "baz");

Questo ti darà un valore immutabile List , quindi non può essere modificato.
Qual è quello che vuoi nella maggior parte dei casi in cui lo stai prepopolando.


Java 8 o precedente:

List<String> strings = Arrays.asList("foo", "bar", "baz");

Questo ti darà il Listsupporto di un array, quindi non può cambiare lunghezza.
Ma si può chiamare List.set, quindi è ancora mutabile .


Puoi renderlo Arrays.asListancora più breve con un'importazione statica:

List<String> strings = asList("foo", "bar", "baz");

L'importazione statica:

import static java.util.Arrays.asList;  

Quale qualsiasi IDE moderno suggerirà e farà automaticamente per te.
Ad esempio in IntelliJ IDEA si preme Alt+Entere si seleziona Static import method....


Tuttavia, non consiglio di abbreviare il List.ofmetodo of, perché diventa confuso.
List.ofè già abbastanza corto e legge bene.


Usando Streams

Perché deve essere un List?
Con Java 8 o versioni successive è possibile utilizzare un Streammetodo più flessibile:

Stream<String> strings = Stream.of("foo", "bar", "baz");

Puoi concatenare Stream:

Stream<String> strings = Stream.concat(Stream.of("foo", "bar"),
                                       Stream.of("baz", "qux"));

Oppure puoi andare da a Streama a List:

import static java.util.stream.Collectors.toList;

List<String> strings = Stream.of("foo", "bar", "baz").collect(toList());

Ma preferibilmente, basta usare il Streamsenza raccoglierlo in a List.


Se hai davvero bisogno di ajava.util.ArrayList

(Probabilmente no.)
Per citare JEP 269 (enfasi sulla mia):

Esiste un piccolo set di casi d'uso per l'inizializzazione di un'istanza di raccolta mutabile con un set predefinito di valori. Di solito è preferibile avere quei valori predefiniti in una raccolta immutabile e quindi inizializzare la raccolta mutabile tramite un costruttore di copie.


Se si vuole sia un precompilare ArrayList e aggiungere ad essa in seguito (perché?), L'uso

ArrayList<String> strings = new ArrayList<>(List.of("foo", "bar"));
strings.add("baz");

o in Java 8 o precedenti:

ArrayList<String> strings = new ArrayList<>(asList("foo", "bar"));
strings.add("baz");

o usando Stream:

import static java.util.stream.Collectors.toCollection;

ArrayList<String> strings = Stream.of("foo", "bar")
                             .collect(toCollection(ArrayList::new));
strings.add("baz");

Ma ancora una volta, è meglio usare Streamdirettamente il invece di raccoglierlo in a List.


Programma per interfacce, non per implementazioni

Hai detto di aver dichiarato l'elenco come ArrayListnel tuo codice, ma dovresti farlo solo se stai usando un membro ArrayListche non è in List.

Cosa che molto probabilmente non stai facendo.

Di solito dovresti semplicemente dichiarare le variabili dall'interfaccia più generale che intendi utilizzare (ad es Iterable. Collection, O List) e inizializzarle con l'implementazione specifica (ad es. ArrayList, LinkedListOArrays.asList() ).

Altrimenti stai limitando il tuo codice a quel tipo specifico, e sarà più difficile cambiare quando vuoi.

Ad esempio, se stai passando un ArrayLista void method(...):

// Iterable if you just need iteration, for (String s : strings):
void method(Iterable<String> strings) { 
    for (String s : strings) { ... } 
}

// Collection if you also need .size(), .isEmpty(), or .stream():
void method(Collection<String> strings) {
    if (!strings.isEmpty()) { strings.stream()... }
}

// List if you also need .get(index):
void method(List<String> strings) {
    strings.get(...)
}

// Don't declare a specific list implementation
// unless you're sure you need it:
void method(ArrayList<String> strings) {
    ??? // You don't want to limit yourself to just ArrayList
}

Un altro esempio sarebbe sempre dichiarare una variabile InputStreamanche se di solito è una FileInputStreamo una BufferedInputStream, perché un giorno presto tu o qualcun altro vorrete usare qualche altro tipo di InputStream.


3
@jollyroger: Arrays.asListè un metodo statico. Vedi docs.oracle.com/javase/1.5.0/docs/guide/language/…
Christoffer Hammarström

2
@ ChristofferHammarström In quel caso, la mia mente da principiante mi dice che l'importazione statica mostra una forte somiglianza con le variabili globali e i pericoli che riguardano tale uso. Questa ipotesi è corretta ed è anche la ragione per cui la risposta simile sopra ottiene più voti?
jollyroger,

2
La risposta sopra, penso che tu stia parlando è stata fatta un anno prima. E no, il problema con le variabili globali è che sono mutabili. Non hanno nulla a che fare con le importazioni statiche.
Christoffer Hammarström,

2
Se non si desidera l'importazione statica, è anche possibile definire il percorso completo del metodo statico asList, in questo modo: List <String> strings = java.util.Arrays.asList ("", "");
Geert Weening,

2
Oppure puoi usare import java.util.Arrays; e Arrays.asList ("", ""); Non è necessario utilizzare un'importazione statica. Non è necessario utilizzare un percorso completo. Ai metodi statici non interessa l'importazione. Si infastidiscono solo se usi un'istanza per trovarli.
candied_orange,

111

Se hai bisogno di un semplice elenco di dimensioni 1:

List<String> strings = new ArrayList<String>(Collections.singletonList("A"));

Se hai bisogno di un elenco di più oggetti:

List<String> strings = new ArrayList<String>();
Collections.addAll(strings,"A","B","C","D");

57

Con Guava puoi scrivere:

ArrayList<String> places = Lists.newArrayList("Buenos Aires", "Córdoba", "La Plata");

In Guava ci sono anche altri utili costruttori statici. Puoi leggere su di loro qui .


1
Sono abbastanza sicuro che si può fare questo con un solo java.util.Arrays, come,List<String> names = Arrays.asList("Beckah", "Sam", "Michael");
Beckah

2
Metodo @beckah Arrays.asLists crea un oggetto di tipo Elenco, mentre la domanda riguarda la creazione di ArrayList
Paweł Adamski


34

I letterali di raccolta non sono arrivati ​​a Java 8, ma è possibile utilizzare l'API Stream per inizializzare un elenco in una riga piuttosto lunga:

List<String> places = Stream.of("Buenos Aires", "Córdoba", "La Plata").collect(Collectors.toList());

Se devi assicurarti che il tuo Listsia un ArrayList:

ArrayList<String> places = Stream.of("Buenos Aires", "Córdoba", "La Plata").collect(Collectors.toCollection(ArrayList::new));

34

Con e sopra, come suggerito in JEP 269: Convenience Factory Methods for Collections , questo risultato potrebbe essere ottenuto usando letterali di raccolta ora con -

List<String> list = List.of("A", "B", "C");

Set<String> set = Set.of("A", "B", "C");

Si applicherebbe anche un approccio simile Map-

Map<String, String> map = Map.of("k1", "v1", "k2", "v2", "k3", "v3")

che è simile alla proposta di Collection Literals come affermato da @coobird. Ulteriori chiarimenti anche nel PEC -


alternative

I cambi di lingua sono stati considerati più volte e respinti:

Progetto Coin proposte, 29 marzo 2009

Progetto Coin proposte, 30 marzo 2009

Discussione di JEP 186 su lambda-dev, gennaio-marzo 2014

Le proposte linguistiche sono state accantonate preferibilmente a una proposta basata sulla biblioteca, come riassunto in questo messaggio.

Correlati: Qual è il punto di sovraccarico dei metodi Convenience Factory per le raccolte in Java 9


31
import com.google.common.collect.ImmutableList;

....

List<String> places = ImmutableList.of("Buenos Aires", "Córdoba", "La Plata");

4
Non voglio aggiungere una nuova dipendenza solo per farlo.
Macarse,

6
È lo stesso Collections.unmodifiableList(Arrays.asList("Buenos Aires", "Córdoba", "La Plata")), che diventa unmodifiableList(asList("Buenos Aires", "Córdoba", "La Plata"))con le importazioni statiche. Non hai bisogno di raccolte Google per questo.
Christoffer Hammarström,

9
No, non è lo stesso. Come ImmutableList sta documentando la sua immutabilità nel tipo di risultato quando unmodifiableList lo maschera come un normale Elenco.
David Pierre,

2
Invece di quello immutabile, le raccolte google offrono anche un elenco di array mutabile: List <String> = Lists.newArrayList ("Buenos Aires", "Córdoba", "La Plata");
L. Holanda,

3
Lo passerai ImmutableListad altri metodi che richiedono un Liste poi hai perso quella documentazione.
Christoffer Hammarström,

23

È possibile creare un metodo di fabbrica:

public static ArrayList<String> createArrayList(String ... elements) {
  ArrayList<String> list = new ArrayList<String>();
  for (String element : elements) {
    list.add(element);
  }
  return list;
}

....

ArrayList<String> places = createArrayList(
  "São Paulo", "Rio de Janeiro", "Brasília");

Ma non è molto meglio del tuo primo refactoring.

Per una maggiore flessibilità, può essere generico:

public static <T> ArrayList<T> createArrayList(T ... elements) {
  ArrayList<T> list = new ArrayList<T>();
  for (T element : elements) {
    list.add(element);
  }
  return list;
}

1
Guarda indietro al post originale, richiede l'inizializzazione dell'array in una riga , non in 7 righe aggiuntive.
L. Holanda,

7
@LeoHolanda: creare metodi di fabbrica per ogni piccola cosa è troppo, sono d'accordo. Ma a seconda della situazione e del numero di volte in cui quel metodo verrà utilizzato, potrebbe avere senso crearlo. La creazione di livelli di astrazione extra ha lo scopo di rimuovere la complessità, creando metodi più significativi che catturano l' intento del progettista.
Jordão,


8

Il modo più compatto per farlo è:

Double array[] = { 1.0, 2.0, 3.0};
List<Double> list = Arrays.asList(array);

8

Usa semplicemente il codice qui sotto come segue.

List<String> list = new ArrayList<String>() {{
            add("A");
            add("B");
            add("C");
}};

2
@bsd È possibile utilizzare questo metodo per dichiarare l'elenco prima di immettere qualsiasi metodo. Quindi, quando si definiscono le variabili di classe, è possibile aggiungere contenuto all'elenco senza dover invocare un metodo per farlo.
Melwil,

2
l'inizializzazione di doppie parentesi graffe dovrebbe essere evitata il più possibile. vedi: stackoverflow.com/a/924326/760393
Raúl

8

Con Eclipse Collections puoi scrivere quanto segue:

List<String> list = Lists.mutable.with("Buenos Aires", "Córdoba", "La Plata");

Puoi anche essere più specifico sui tipi e se sono mutabili o immutabili.

MutableList<String> mList = Lists.mutable.with("Buenos Aires", "Córdoba", "La Plata");
ImmutableList<String> iList = Lists.immutable.with("Buenos Aires", "Córdoba", "La Plata");

Puoi fare lo stesso con Set e Borse:

Set<String> set = Sets.mutable.with("Buenos Aires", "Córdoba", "La Plata");
MutableSet<String> mSet = Sets.mutable.with("Buenos Aires", "Córdoba", "La Plata");
ImmutableSet<String> iSet = Sets.immutable.with("Buenos Aires", "Córdoba", "La Plata");

Bag<String> bag = Bags.mutable.with("Buenos Aires", "Córdoba", "La Plata");
MutableBag<String> mBag = Bags.mutable.with("Buenos Aires", "Córdoba", "La Plata");
ImmutableBag<String> iBag = Bags.immutable.with("Buenos Aires", "Córdoba", "La Plata");

Nota: sono un committer per le raccolte Eclipse.


7

Ecco un altro modo:

List<String> values = Stream.of("One", "Two").collect(Collectors.toList());

7

(Dovrebbe essere un commento, ma troppo lungo, quindi nuova risposta). Come altri hanno già detto, il Arrays.asListmetodo è di dimensioni fisse, ma non è l'unico problema. Inoltre non gestisce molto bene l'eredità. Ad esempio, supponiamo di avere quanto segue:

class A{}
class B extends A{}

public List<A> getAList(){
    return Arrays.asList(new B());
}

Quanto sopra si traduce in un errore del compilatore, perché List<B>(che è ciò che viene restituito da Arrays.asList) non è una sottoclasse di List<A>, anche se è possibile aggiungere oggetti di tipo B a un List<A>oggetto. Per ovviare a questo, devi fare qualcosa del tipo:

new ArrayList<A>(Arrays.<A>asList(b1, b2, b3))

Questo è probabilmente il modo migliore per farlo, esp. se hai bisogno di un elenco illimitato o devi utilizzare l'ereditarietà.


6

È possibile utilizzare le seguenti istruzioni:

Snippet di codice:

String [] arr = {"Sharlock", "Homes", "Watson"};

List<String> names = Arrays.asList(arr);

Puoi inserire la prima espressione per avere una soluzione compatta:letters = Arrays.asList(new String[]{"A", "B", "C"});
Pavel Repin, il

5

Come Tom ha detto :

List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");

Ma poiché ti sei lamentato di volere un ArrayList, dovresti innanzitutto sapere che ArrayList è una sottoclasse di Elenco e potresti semplicemente aggiungere questa riga:

ArrayList<String> myPlaces = new ArrayList(places);

Tuttavia, ciò potrebbe farti lamentare di "prestazioni".

In tal caso non ha senso per me, perché, poiché l'elenco è predefinito, non è stato definito come un array (poiché la dimensione è nota al momento dell'inizializzazione). E se questa è un'opzione per te:

String[] places = {"Buenos Aires", "Córdoba", "La Plata"};

Se non ti interessano le differenze di prestazioni minori, puoi anche copiare un array in una ArrayList in modo molto semplice:

ArrayList<String> myPlaces = new ArrayList(Arrays.asList(places));

Va bene, ma in futuro hai bisogno di qualcosa di più del semplice nome del luogo, hai bisogno anche di un prefisso internazionale. Supponendo che questo sia ancora un elenco predefinito che non cambierà mai durante il runtime, quindi è opportuno utilizzare un enumset, che richiederebbe una nuova compilazione se l'elenco dovesse essere modificato in futuro.

enum Places {BUENOS_AIRES, CORDOBA, LA_PLATA}

potrebbe diventare:

enum Places {
    BUENOS_AIRES("Buenos Aires",123),
    CORDOBA("Córdoba",456),
    LA_PLATA("La Plata",789);

    String name;
    int code;
    Places(String name, int code) {
      this.name=name;
      this.code=code;
    }
}

Gli Enum hanno un valuesmetodo statico che restituisce un array contenente tutti i valori dell'enum nell'ordine in cui sono dichiarati, ad esempio:

for (Places p:Places.values()) {
    System.out.printf("The place %s has code %d%n",
                  p.name, p.code);
}

In tal caso, suppongo che non avresti bisogno della tua ArrayList.

PS Randyaa ha dimostrato un altro modo carino usando il metodo dell'utilità statica Collections.addAll .


5

Java 9 ha il seguente metodo per creare un elenco immutabile :

List<String> places = List.of("Buenos Aires", "Córdoba", "La Plata");

che si adatta facilmente per creare un elenco mutabile, se necessario:

List<String> places = new ArrayList<>(List.of("Buenos Aires", "Córdoba", "La Plata"));

Metodi simili sono disponibili per Sete Map.


1
È bene che tu abbia esplicitamente detto "elenco immutabile" e poi hai mostrato un altro esempio di elenco mutabile perché chiarisce quale utilizzare quando.
Cherit

4
List<String> names = Arrays.asList("2","@2234","21","11");

4

Sì, con l'aiuto di Array puoi inizializzare l'elenco di array in una riga,

List<String> strlist= Arrays.asList("aaa", "bbb", "ccc");

4

Puoi usare StickyListda Cactoos :

List<String> names = new StickyList<>(
  "Scott Fitzgerald", "Fyodor Dostoyevsky"
);

3

Prova con questa riga di codice:

Collections.singletonList(provider)

1
Aggiungi una breve descrizione della tua risposta.
Morales Batovski,

2

In Java, non puoi farlo

ArrayList<String> places = new ArrayList<String>( Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

Come è stato sottolineato, è necessario eseguire un'inizializzazione con doppio controvento:

List<String> places = new ArrayList<String>() {{ add("x"); add("y"); }};

Ma questo potrebbe costringerti ad aggiungere un'annotazione @SuppressWarnings("serial")o generare un UUID seriale che è fastidioso. Inoltre, la maggior parte dei formattatori di codice lo scarterà in più istruzioni / righe.

In alternativa puoi farlo

List<String> places = Arrays.asList(new String[] {"x", "y" });

ma allora potresti voler fare un @SuppressWarnings("unchecked").

Anche secondo javadoc dovresti essere in grado di fare questo:

List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

Ma non riesco a farlo compilare con JDK 1.6.


5
Sbagliato! È possibile fare la prima linea, e questa è la risposta giusta btw
Bohemian

1
Collections.singletonList(messageBody)

Se avessi bisogno di avere un elenco di un oggetto !

Le raccolte provengono dal pacchetto java.util .


1

Il modo migliore per farlo:

package main_package;

import java.util.ArrayList;


public class Stackkkk {
    public static void main(String[] args) {
        ArrayList<Object> list = new ArrayList<Object>();
        add(list, "1", "2", "3", "4", "5", "6");
        System.out.println("I added " + list.size() + " element in one line");
    }

    public static void add(ArrayList<Object> list,Object...objects){
        for(Object object:objects)
            list.add(object);
    }
}

Basta creare una funzione che può avere tutti gli elementi desiderati e chiamarla per aggiungerli in una riga.


1
Se attraversi tutti i problemi potresti anche renderlo un metodo modello invece di usare plain Object.
Robert,

1

Ecco il codice di AbacusUtil

// ArrayList
List<String> list = N.asList("Buenos Aires", "Córdoba", "La Plata");
// HashSet
Set<String> set = N.asSet("Buenos Aires", "Córdoba", "La Plata");
// HashMap
Map<String, Integer> map = N.asMap("Buenos Aires", 1, "Córdoba", 2, "La Plata", 3);

// Or for Immutable List/Set/Map
ImmutableList.of("Buenos Aires", "Córdoba", "La Plata");
ImmutableSet.of("Buenos Aires", "Córdoba", "La Plata");
ImmutableSet.of("Buenos Aires", 1, "Córdoba", 2, "La Plata", 3);

// The most efficient way, which is similar with Arrays.asList(...) in JDK. 
// but returns a flexible-size list backed by the specified array.
List<String> set = Array.asList("Buenos Aires", "Córdoba", "La Plata");

Dichiarazione : Sono lo sviluppatore di AbacusUtil.


0

Per me Arrays.asList () è il migliore e conveniente. Mi piace sempre inizializzare in quel modo. Se sei un principiante nelle Collezioni Java, vorrei che tu riferissi l' inizializzazione di ArrayList


Perché Arrays.asList () è meglio della creazione di un nuovo ArrayList in una riga con i add()metodi?
IgorGanapolsky,

0

Perché non fare una semplice funzione di utilità che fa questo?

static <A> ArrayList<A> ll(A... a) {
  ArrayList l = new ArrayList(a.length);
  for (A x : a) l.add(x);
  return l;
}

" ll" sta per "elenco letterale".

ArrayList<String> places = ll("Buenos Aires", "Córdoba", "La Plata");

0

è interessante notare che non è elencato un liner con l'altro metodo sovraccaricoStream::collect

ArrayList<String> places = Stream.of( "Buenos Aires", "Córdoba", "La Plata" ).collect( ArrayList::new, ArrayList::add, ArrayList::addAll );

-1

In realtà, è possibile farlo in una riga:

Arrays.asList(new MyClass[] {new MyClass("arg1"), new MyClass("arg2")})

3
Posso chiedere cosa si aggiunge alla domanda? Questa risposta è già coperta più volte da altre risposte.
Mistico

Questa è in realtà una soluzione davvero negativa in quanto crea un ELENCO ASTRATTO. Non sarai in grado di aggiungere altro al contenitore.
Atais,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.