2012-10-01 14 views
21

ho MyClass comecome inizializzare ArrayList statico <myclass> in una linea

MyClass(String, String, int); 

so su come aggiungere da aggiungere a ArrayList in questo modo:

MyClass.name = "Name"; 
MyClass.address = "adress";adress 
MyClass.age = age; 

quindi aggiungere al ArrayList come:

list.add(MyClass); 

ma ora ho molti MyClass oggetto in forma statica, voglio aggiungere

ArrayList<MyClass> list = new ArrayList<MyClass>({"Name","Address", age};.....); 

posso fare così. grazie lo stesso

+6

Le classi in Java devono essere denominate come 'MyClass'. –

risposta

35

È possibile utilizzare double braces initialization: -

List<MyClass> list = new ArrayList<MyClass>() { 
    { 
     add(new MyClass("name", "address", 23)); 
     add(new MyClass("name2", "address2", 45)); 
    } 
}; 

Come si può vedere che, inner braces è proprio come un initializer blocco, che viene utilizzato per inizializzare il list in una volta sola ..

Da notare anche la punto e virgola alla fine della vostra double-braces

+0

Questa dovrebbe essere davvero la Lista nella dichiarazione – RNJ

+0

@RNJ .. Sì, hai ragione .. La modificherà .. –

+0

Questo è divertente ma in cosa è meglio o più semplice di fare semplicemente 'list.add (nuovo .. .' subito dopo 'Lista list = new ArrayList ()'? –

20

Si può fare

List<MyClass> list = Arrays.asList(
         new MyClass("Name", "Address", age), 
         // many more 
        ); 

Nota: questo creerà una lista in cui non è possibile modificare le dimensioni.

+0

+1; E questo è probabilmente ciò che vuole raggiungere. – maba

+0

Funziona bene per definire una matrice costante (statica finale) come membro della classe. –

7

Qualcosa di simile a questo:

List<MyClass> list = new ArrayList<MyClass>(Arrays.asList(new MyClass[] {new MyClass("Name", "Address", age})); 

Naturalmente, la classe deve avere un costruttore come questo:

public MyClass(String name, String address, int age) { 
... 
} 
3

È possibile creare un'istanza ArrayList in questo modo:

new ArrayList<myclass>() {{ 
    add(new MyClass("Name", "Address", age)); 
}}; 

Questo crea una classe interna anonima che in realtà si estende ArrayList, con una blocco inizializzatore che chiama add. Questo è ovviamente completamente sporco e farà sì che i tuoi colleghi vogliano farti del male, quindi dovresti usare lo Arrays.asList.:)

1

Se quello che vuoi è avere l'inizializzazione più pulito e più semplice, potrebbe essere questo:

List<MyClass> list = MyClass.build(
     "Name", "Address", 51, 
     "a2", "c", 4, 
     "v", "d", 2 
    ); 

Questo utilizza questo metodo di utilità:

public static List<MyClass> build(Object... array) { 
    List<MyClass> list = new ArrayList<Test>(); 
    for (int i=0; i<array.length-2; i+=3) { 
     list.add(new MyClass((String)array[i], (String)array[i+1], (Integer)array[i+2])); 
    } 
    return list; 
} 
0

Il modo "migliore" per fare questo in un modo efficace sarebbe:

List<MyClass> list = new ArrayList<MyClass>(); 

list.add(new MyClass("name", "address", 23)); 
list.add(new MyClass("name2", "address2", 45)); 

anche se richiede un sacco di digitazione ma come è possibile vedere chiaramente questo è più efficient

Un'altra alternativa sarebbe quella di utilizzare Google guava (non testato per l'efficienza):

ArrayList<MyClass> list = new ArrayList<MyClass>(
      new MyClass("name", "address", 23), 
      new MyClass("name2", "address2", 45)); 

L'importazione richiesto è import static com.google.common.collect.Lists.newArrayList;

inoltre, è possibile utilizzare doppia parentesi di inizializzazione come originariamente proposto da @Rohit Jain: -

List<MyClass> list = new ArrayList<MyClass>() { 
    { 
     add(new MyClass("name", "address", 23)); 
     add(new MyClass("name2", "address2", 45)); 
    } 
}; 

Come potete vedere, inner braces è proprio come un initializer blocco, che viene utilizzato per inizializzare il list in una volta sola ..

nota il punto e virgola alla fine della vostra double-braces

anche notare l'ultimo metodo ha alcuni aspetti negativi come discusso here .

Problemi correlati