it-swarm.com.de

Initialisierung von ArrayList mit einigen vordefinierten Werten

Ich habe ein Beispielprogramm wie gezeigt.

Ich möchte, dass mein ArrayListsymbolsPresent mit einigen vordefinierten Symbolen initialisiert wird: EINS, ZWEI, DREI und VIER.

symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");
import Java.util.ArrayList;

public class Test {

    private ArrayList<String> symbolsPresent = new ArrayList<String>();

    public ArrayList<String> getSymbolsPresent() {
        return symbolsPresent;
    }

    public void setSymbolsPresent(ArrayList<String> symbolsPresent) {
        this.symbolsPresent = symbolsPresent;
    }

    public static void main(String args[]) {    
        Test t = new Test();
        System.out.println("Symbols Present is" + t.symbolsPresent);

    }    
}

Ist das möglich?

58
Pawan

versuche dies

new String[] {"One","Two","Three","Four"};

oder

List<String> places = Arrays.asList("One", "Two", "Three");

[~ # ~] Arrays [~ # ~]

137
samba

Doppelte geschweifte Klammern sind eine Option:

List<String> symbolsPresent = new ArrayList<String>() {{
   add("ONE");
   add("TWO");
   add("THREE");
   add("FOUR");
}};

Beachten Sie, dass das generische Typargument String in dem zugewiesenen Ausdruck erforderlich ist , wie durch JLS §15.9 angegeben

Es ist ein Fehler beim Kompilieren, wenn ein Ausdruck zum Erstellen einer Klasseninstanz eine anonyme Klasse deklariert, indem das Formular "<>" für die Typargumente der Klasse verwendet wird.

53
Reimeus

Wie wäre es mit überladenen ArrayList-Konstruktor .

 private ArrayList<String> symbolsPresent = new ArrayList<String>(Arrays.asList(new String[] {"One","Two","Three","Four"}));
17
PermGenError

Sie können auch die varargs-Syntax verwenden, um den Code übersichtlicher zu gestalten:

Verwenden Sie den überladenen Konstruktor:

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c"));

Unterklasse ArrayList in einem utils-Modul:

public class MyArrayList<T> extends ArrayList<T> {
    public MyArrayList(T... values) {
        super(Arrays.asList(values));
    }
}

ArrayList<String> list = new MyArrayList<String>("a", "b", "c");

Oder haben Sie eine statische Factory-Methode (mein bevorzugter Ansatz):

public class Utils {
  public static <T> ArrayList<T> asArrayList(T... values) {
    return new ArrayList<T>(Arrays.asList(values));
  }
}

ArrayList<String> list = Utils.asArrayList("a", "b", "c");
11
Dilum Ranatunga
import com.google.common.collect.Lists;

...


ArrayList<String> getSymbolsPresent = Lists.newArrayList("item 1", "item 2");

...
10
Kristy Hughes

Sie können Java 8 Stream API verwenden.
Sie können einen Stream von Objekten erstellen und diese als Liste sammeln.

private List<String> symbolsPresent = Stream.of("ONE", "TWO", "THREE", "FOUR")
    .collect(Collectors.toList());
7
public static final List<String> permissions = new ArrayList<String>() {{
    add("public_profile");
    add("email");
    add("user_birthday");
    add("user_about_me");
    add("user_location");
    add("user_likes");
    add("user_posts");
}};
6

Mit Java 9 können Sie eine nicht änderbare Liste mit einer einzigen Codezeile erstellen, indem Sie die Factory List.of Verwenden:

public class Main {
    public static void main(String[] args) {
        List<String> examples = List.of("one", "two", "three");
        System.out.println(examples);
    }
}

Ausgabe:

[one, two, three]
4
J-Alex

Persönlich mache ich gerne alle Initialisierungen im Konstruktor

public Test()
{
  symbolsPresent = new ArrayList<String>();
  symbolsPresent.add("ONE");
  symbolsPresent.add("TWO");
  symbolsPresent.add("THREE");
  symbolsPresent.add("FOUR");
}

Bearbeiten: Es ist natürlich eine Wahl und andere bevorzugen es, in der Deklaration zu initialisieren. Beide sind gültig, ich habe den Konstruktor gewählt, da dort alle Arten von Initialisierungen möglich sind (wenn Sie eine Schleife oder Parameter benötigen, ...). Allerdings initialisiere ich die Konstanten in der Deklaration oben in der Quelle.
Das Wichtigste ist, eine Regel zu befolgen, die Sie mögen, und in unseren Klassen konsequent zu sein.

3
mki

Ich würde vorschlagen, Arrays.asList () für einzeilige Initialisierung zu verwenden. Weitere Informationen zum Deklarieren und Initialisieren einer Liste finden Sie unter Initialisierung von ArrayList in Java

2
Manoj Kumar

Wenn die Liste schreibgeschützt sein soll (löst bei Änderung eine UnsupportedOperationException aus):

List<String> places = Collections.unmodifiableList(Arrays.asList("One", "Two", "Three"));

2
ZachF

Ich verwende eine generische Klasse, die von ArrayList erbt, und implementiere einen Konstruktor mit einem Parameter mit Variablennummer oder Argumenten:

public class MyArrayList<T> extends ArrayList<T> {
    public MyArrayList(T...items){
        for (T item : items) {
            this.add(item);
        }
    }
}

Beispiel:

MyArrayList<String>myArrayList=new MyArrayList<String>("s1","s2","s2");
1

Wenn Sie nur außerhalb einer Methode initialisieren möchten, verwenden Sie die Initialisierungsblöcke:

import Java.util.ArrayList;

public class Test {
private ArrayList<String> symbolsPresent = new ArrayList<String>();

// All you need is this block.
{
symbolsPresent = new ArrayList<String>();
symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");
}


public ArrayList<String> getSymbolsPresent() {
    return symbolsPresent;
}

public void setSymbolsPresent(ArrayList<String> symbolsPresent) {
    this.symbolsPresent = symbolsPresent;
}

public static void main(String args[]) {    
    Test t = new Test();
    System.out.println("Symbols Present is" + t.symbolsPresent);

}    
}
0