2013-10-04 10 views
10

In C# posso creare una raccolta di qualche tipo e inizializzarla con i dati sulla stessa riga.Come posso inizializzare una raccolta e aggiungere dati sulla stessa linea?

var foo = new List<string> {"one","two","three"};

C'è un modo equivalente di fare questo in Java?

+0

Commenti del downvoter? – Joe

+1

probabilmente perché ci sono molti duplicati di questa domanda che sono facilmente ricercabili. –

+0

Ho cercato. per qualche ragione non è saltato fuori niente. Lo rimuoverò – Joe

risposta

15

Se avete bisogno di un sola letturaList

List<String> numbers = Arrays.asList("one","two","three"); 

// Can't add since the list is immutable 
numbers.add("four"); // java.lang.UnsupportedOperationException 

Se si desidera modificare il List in seguito.

List<String> numbers2 = new ArrayList<String>(
          Arrays.asList("one","two","three")); 
numbers2.add("four"); 

System.out.println(numbers2); // [one, two, three, four] 
0
List<String> list = Arrays.asList("one","two","three") 
+1

Ciò rende immutabile la lista risultante. –

+0

Ok allora 'nuovo ArrayList (Arrays.asList (" uno "," due "," tre "))' – Nailgun

+0

Ora hai creato un elenco e un array, nonché il wrapper dell'elenco per l'array quando tutto ciò era richiesto era un array ... –

3

È possibile utilizzare Arrays.asList(T... a)

List<String> foo = Arrays.asList("one","two","three"); 

Come Boris menziona nei commenti risultante List è immutabile (es. Di sola lettura). Avrete bisogno di convertirlo in un ArrayList o simili, al fine di modificare l'insieme:

List<String> foo = new ArrayList<String>(Arrays.asList("one","two","three")); 

è anche possibile creare il List utilizzando una sottoclasse anonima e inizializzatore:

List<String> foo = new ArrayList<String>() { 
    { 
     add("one"); 
     add("two"); 
     add("three"); 
    } 
}; 
+0

Ciò rende immutabile l'Elenco risultante. –

0
List<String> numbers = Arrays.asList("one","two","three"); 

Come Boris ha commentato, rende immutabile il tuo numbers.

Sì, è possibile, ma con due linee.

List<String> numbers= new ArrayList<String>(); 
Collections.addAll(numbers,"one","two","three"); 

Se si vuole ancora solo in una linea, con Gauva

List<String> numbers= Lists.newArrayList("one","two","three"); 
0

Il meglio che sono stato in grado di venire in mente è:

final List<String> foo = new ArrayList<String>() {{ 
    add("one"); 
    add("two"); 
    add("three"); 
}}; 

In sostanza, che afferma che si sta creando una sottoclasse anonima della classe ArrayList che viene quindi inizializzata staticamente utilizzando "one", "two", "three".

+0

Questa domanda è rivolta a Java. –

+0

Non c'è motivo di creare una classe anonima per evitare alcune righe di codice. –

+0

scusate, ultimamente ho lavorato su un po 'troppo javascript. –

4

preferisco farlo utilizzando la Guava (precedentemente chiamato Google Collections) biblioteca, che sia elimina la necessità di scrivere il tipo di nuovo e ha tutti i tipi di modi di aggiungere i dati immediatamente.

Esempio: List<YourClass> yourList = Lists.newArrayList();

o con dati aggiungendo: List<YourClass> yourList = Lists.newArrayList(yourClass1, yourclass2);

Le stesse opere per tutti gli altri tipi di collezioni e le loro varie implementazioni. Un altro esempio: Set<String> treeSet = Sets.newTreeSet();

lo si può trovare a https://code.google.com/p/guava-libraries/

Problemi correlati