2013-10-04 8 views
10

W języku C# mogę utworzyć kolekcję pewnego rodzaju i zainicjować ją danymi w tej samej linii.Jak zainicjować kolekcję i dodać dane w tym samym wierszu?

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

Czy istnieje odpowiednik sposób to zrobić w Java?

+0

komentarze z downvoter? – Joe

+1

prawdopodobnie dlatego, że istnieje wiele duplikatów tego pytania, które można łatwo przeszukiwać. –

+0

Poszukałem. z jakiegoś powodu nic się nie pojawiło. Ja usunę to – Joe

Odpowiedz

15

Jeśli potrzebujesz tylko do odczytuList

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

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

Jeśli chcesz modyfikowaćList później.

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

To powoduje, że wynikowa 'Lista' jest niezmienna. –

+0

Ok następnie 'nowa ArrayList (Arrays.asList (" jeden "," dwa "," trzy "))' – Nailgun

+0

Teraz utworzyłeś listę i tablicę, a także opakowanie listy dla tablicy, gdy wszystko, co było wymagana była tablica ... –

3

Można użyć Arrays.asList(T... a)

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

Boris wspomina w komentarzach otrzymany List jest niezmienna (tzn. Tylko do odczytu). trzeba będzie przekształcić go do ArrayList lub podobnym, aby zmodyfikować kolekcji:

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

Można również utworzyć List użyciem anonimowej podklasy i inicjator:

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

Powoduje to, że wynikowa lista jest niezmienna. –

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

Boris skomentował, sprawia, że ​​twój numbers jest niezmienny.

Tak, możesz, ale z dwoma liniami.

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

Jeśli nadal chcesz się tylko w jednej linii, z Gauva

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

najlepiej, że udało mi się wymyślić to:

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

zasadzie, że mówi, że tworzysz anonimową podklasę klasy ArrayList, która jest następnie inicjalizowana statycznie za pomocą "one", "two", "three".

+0

To pytanie jest przeznaczone dla języka Java. –

+0

Nie ma powodu, aby tworzyć anonimowe klasy, aby uniknąć kilku linii kodu. –

+0

Przepraszam, ostatnio pracowałem nad trochę za dużo javascript. –

4

Wolę robić to za pomocą Guava (dawniej zwany Kolekcje Google) biblioteki, które zarówno eliminuje potrzebę ponownego zapisu typ dół i posiada wszystkie rodzaje sposobów dodawania danych od razu.

Przykład: List<YourClass> yourList = Lists.newArrayList();

Albo z dodawaniem danych: List<YourClass> yourList = Lists.newArrayList(yourClass1, yourclass2);

Te same działa dla wszystkich innych rodzajów zbiorów i ich różnych implementacjach. Inny przykład: Set<String> treeSet = Sets.newTreeSet();

Można go znaleźć na https://code.google.com/p/guava-libraries/

Powiązane problemy