Bir satırda ArrayList öğesinin başlatılması


2755

Test amacıyla bir seçenekler listesi oluşturmak istedim. İlk başta bunu yaptım:

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

Sonra, kodu aşağıdaki gibi yeniden düzenledi:

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

Bunu yapmanın daha iyi bir yolu var mı?


34
Bu birim testi için tasarlanmışsa, bir salınım için mükemmel bir şekilde deneyin. Java kodunu test ederken test kodunuzu yazabilir ve kullanabilirsinizArrasyList<String> places = ["Buenos Aires", "Córdoba", "La Plata"]
ripper234

3
Java SE 7'de yapıcıya ait parametrelenmiş türü, boş bir tür parametre kümesiyle değiştirebilirsiniz (<>): Map <String, List <String>> myMap = new HashMap <> ();
Rose


2
çift ​​destek başlatma kullanın :)
Mohammadreza Khatami

8
Stream.of ("val1", "val2"). Toplamak (Collectors.toList ()); // ArrayList, Java8 çözümü oluşturur.
torina

Yanıtlar:


2025

Aslında, başlangıç ​​durumuna getirmenin "en iyi" yolu, ArrayListyazdığınız yöntemdir, çünkü Listherhangi bir şekilde yeni bir şey oluşturmanız gerekmez :

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

Yakalama, bu listörneğe başvurmak için biraz yazmanın gerekli olmasıdır .

Bir örnek başlatıcısı ile anonim bir iç sınıf yapmak ("çift ayraç başlatma" olarak da bilinir) gibi alternatifler vardır:

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

Ancak, bu yönteme çok düşkün değilim, çünkü sonunda ArrayListbir örnek başlatıcısı olan bir alt sınıf var ve bu sınıf sadece bir nesne oluşturmak için yaratıldı - bu benim için biraz abartılı gibi görünüyor.

İyi olurdu, Project Coin için Koleksiyon Değişmezleri önerisi kabul edilirse (Java 7'de sunulması planlandı, ancak Java 8'in bir parçası olması muhtemel değildi):

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

Ne yazık ki burada size yardımcı olmayacak, çünkü bir Listyerine değişmez bir başlangıç ​​başlatacak ArrayListve dahası, henüz mevcut değilse, henüz mevcut değil.


172
Bkz stackoverflow.com/questions/924285 çift bağ başlatma, avantaj ve dezavantajları hakkında daha fazla bilgi için.
Eddie

6
@Eddie: Bağlantı için iyi bir çağrı - çift ayraç başlatma ile ilgili bir cümle onu tam olarak tanımlamak için yeterli değildir.
coobird

2
Yalnızca Otomatik boks Listesi <Double> list = [1.0, 2.0, 3.0] 'a güvenmiyorsanız çalışır; başarısız olur.
Richard B

1
Çift
listeli

6
Bu cevap en çok oylanan ve bahsedilen Proje Parası olduğundan, java 9'un List.of (...) sözdizimi ile birlikte gönderildiğini söylemelisiniz: docs.oracle.com/javase/9/docs/api/java/util/ List.html # of-E ...-
Asaf

2155

Sadece bir olarak ilan etmek daha kolay olurdu List- bir ArrayList olmak zorunda mı?

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

Veya yalnızca bir öğeniz varsa:

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

Bu places, değişmez olduğu anlamına gelir (değiştirmeye çalışmak bir UnsupportedOperationExceptionistisnanın atılmasına neden olacaktır ).

Somut olan değiştirilebilir bir liste yapmak için değişmez listeden ArrayListbir tane oluşturabilirsiniz ArrayList:

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

18
@Marcase: Sınıfınızı ArrayList yerine bir Liste kullanacak şekilde değiştiremez misiniz?
Lawrence Dol

74
Cevabım gereği ArrayList, özel yöntemler kullanmıyorsanız , bildirimi değiştirmek daha iyi bir tasarım olacaktır List. Uygulamaları değil arayüzleri belirtin.
Christoffer Hammarström

9
@Christoffer Hammarström: beyanı List olarak değiştirir ve Listeyi <String> places = Arrays.asList (...) kullanırsa; places.add ("blabla")
maks

57
Daha açıkçası, asList(...)sabit bir boyut döndürür Listmutasyona gibi operasyonlar kadar darbeler removeve clearişler Listdesteğe sözleşme iddiaları. Bildirimi olarak bırakmış olsanız bile List, List l = new ArrayList(asList(...))OperationNotSupported özel durumlarını atmayan bir nesneyi almak için eşik kullanmanız gerekir . Liskov İkame İlkesi kimse var mı?
Splash

5
@Splash: removeve clearisteğe bağlı işlemler List, yani asList(...)sözleşmeyi izleyin. OP hiçbir yerde daha sonra daha fazla eleman eklemesi gerektiğini söylemiyor, örnek sadece Listüç unsurla başlatılması gereken bir örnek değil .
Christoffer Hammarström

872

Basit cevap

In Java 9 veya üstü, sonra List.of()eklendi:

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

İle Java 10 üstü veya bununla kısaltılabilir varanahtar kelime.

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

Bu size değişmez bir şey verecektir List, bu yüzden değiştirilemez.
Önceden doldurduğunuz çoğu durumda istediğiniz şey budur.


Java 8 veya öncesi:

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

Bu size Listbir dizi tarafından desteklenir, böylece uzunluğu değiştiremez.
Ama arayabilirsiniz List.set, bu yüzden hala değişebilir .


Sen yapabilir Arrays.asListstatik ithalat ile daha kısa:

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

Statik içe aktarma:

import static java.util.Arrays.asList;  

Hangi herhangi bir modern IDE sizin için önerecek ve otomatik olarak yapacak.
Örneğin IntelliJ IDEA içinde tuşuna Alt+Enterbasıp seçin Static import method....


Ancak, List.ofyöntemin kısaltılmasını önermiyorum of, çünkü bu kafa karıştırıcı hale geliyor.
List.ofzaten yeterince kısa ve iyi okuyor.


kullanılması Streams

Neden bir olmak zorunda List?
Java 8 veya daha yenisi Streamile daha esnek olanı kullanabilirsiniz :

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

Leri birleştirebilirsiniz Stream:

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

Ya da bir den gidebilirsiniz Streama List:

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

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

Ama tercihen, Streama'yı toplamadan kullanın List.


Eğer varsa gerçekten özellikle ihtiyaçjava.util.ArrayList

(Muhtemelen yapmıyorsunuz.) JEP 269'u
alıntılamak için (benimkini vurgulayın):

Önceden tanımlanmış bir değer kümesiyle değiştirilebilir bir toplama örneğini başlatmak için küçük bir kullanım durumu kümesi vardır. Bu önceden tanımlanmış değerlerin değişmez bir koleksiyonda olması ve daha sonra değiştirilebilir koleksiyonun bir kopya oluşturucu aracılığıyla başlatılması genellikle tercih edilir.


Eğer isterseniz hem önceden doldurmak An ArrayList ve (neden?) Sonradan kendisine, kullanımını eklemek

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

veya Java 8 veya önceki sürümlerde:

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

veya kullanarak Stream:

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

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

Ama yine de, Streamdoğrudan bir yerine toplamak yerine doğrudan kullanmak daha iyidir List.


Uygulamalara değil, arayüzlere program

Eğer bir listeyi ilan ettik söyledi ArrayListKodunuzdaki, ama eğer tek bir üyesini kullanıyorsanız arasan ArrayListo burada değil List.

Hangi muhtemelen yapmıyorsun.

Genellikle sadece (örneğin kullanım edeceklerini en genel arayüzü tarafından değişkenleri bildirmek gerekir Iterable, Collectionya da List) ve spesifik uygulamaya onları başlatmaya (örneğin ArrayList, LinkedListya da Arrays.asList()).

Aksi takdirde kodunuzu belirli bir türle sınırlandırırsınız ve istediğiniz zaman değiştirmek daha zor olacaktır.

Örneğin, bir geçiriyorsanız eğer ArrayListbir etmek 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
}

Başka bir örnek InputStream, genellikle a FileInputStreamveya a olmasına rağmen her zaman değişken bildirmek olacaktır BufferedInputStream, çünkü bir gün yakında siz veya başka biri başka bir tür kullanmak isteyecektir InputStream.


3
@jollyroger: Arrays.asListstatik bir yöntemdir. Bkz. Docs.oracle.com/javase/1.5.0/docs/guide/language/…
Christoffer Hammarström

2
@ ChristofferHammarström Bu durumda, acemi zihnim bana statik ithalatın küresel değişkenlere ve bu kullanıma ilişkin tehlikelere güçlü benzerlik gösterdiğini söylüyor. Bu varsayım doğru mu ve yukarıdaki cevabın daha fazla oy almasının nedeni de mi?
jollyroger

2
Sanırım bahsettiğiniz cevap bir yıl önce yapılmıştı. Ve hayır, küresel değişkenlerle ilgili problem değişken olmalarıdır. Statik ithalat ile ilgisi yoktur.
Christoffer Hammarström

2
Statik içe aktarma istemiyorsanız, statik asList yönteminin tam yolunu da tanımlayabilirsiniz: List <String> strings = java.util.Arrays.asList ("", "");
Geert Weening

2
Veya import java.util.Arrays kullanabilirsiniz; ve Arrays.asList ("", ""); Statik bir içe aktarma kullanmak zorunda değilsiniz. Tam yol kullanmak zorunda değilsiniz. Statik yöntemler içe aktarmayı umursamıyor. Bunları bulmak için bir örnek kullanırsanız rahatsız olurlar.
candied_orange

111

Boyut 1'in basit bir listesine ihtiyacınız varsa:

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

Birkaç nesnenin listesine ihtiyacınız varsa:

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

57

İle Guava yazabilirsiniz:

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

Guava'da başka yararlı statik yapıcılar da vardır. Bunları burada okuyabilirsiniz .


1
Bunu java.util.Arraysböyle bir List<String> names = Arrays.asList("Beckah", "Sam", "Michael");
şeyle

2
@beckah method Arrays.asLists, List türünde bir nesne oluştururken, soru ArrayList oluşturmakla ilgilidir
Paweł Adamski


34

Koleksiyon hazır değerleri Java 8'e girmedi, ancak bir listeyi oldukça uzun bir satırda başlatmak için Akış API'sini kullanmak mümkündür:

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

Eğer senin sağlamak için gerekirse Listbir olduğunu ArrayList:

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

34

İle ve yukarıda, JEP 269: Koleksiyonlar için Kullanışlı Fabrika Yöntemleri'nde önerildiği gibi, şu anda toplama hazır değerleri kullanılarak -

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

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

Benzer bir yaklaşım için de geçerlidir Map-

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

@coobird tarafından belirtilen Koleksiyon Değişmezleri teklifine benzer . JEP'de de daha fazla açıklığa kavuşturuldu -


Alternatifler

Dil değişiklikleri birkaç kez dikkate alınmış ve reddedilmiştir:

Proje Para Teklifi, 29 Mart 2009

Proje Para Teklifi, 30 Mart 2009

JEP 186 Lambda-Dev Üzerine Tartışma, Ocak-Mart 2014

Dil teklifleri, bu mesajda özetlendiği gibi, kütüphane temelli bir teklif yerine bir kenara bırakıldı .

İlgili: Java 9 Koleksiyonlar için aşırı yüklenmiş Kolaylık Fabrika Yöntemleri nedir?


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

....

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

4
Sadece bunu yapmak için yeni bir bağımlılık eklemek istemiyorum.
Macarse

6
Olarak bu aynı şey Collections.unmodifiableList(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"))olur ki, unmodifiableList(asList("Buenos Aires", "Córdoba", "La Plata"))statik ithalatla. Bunun için Google Koleksiyonlarına ihtiyacınız yok.
Christoffer Hammarström

9
Hayır, aynı değil. ImmutableList, değiştirilemeyen Listeyi normal bir Liste olarak maskelediğinde sonuç türündeki değişmezliğini belgeliyor.
David Pierre

2
Değişmez olanın yerine, google koleksiyonları da değiştirilebilir dizi listesi sunar: List <String> = Lists.newArrayList ("Buenos Aires", "Córdoba", "La Plata");
L. Holanda

3
Bunu, ImmutableLista alan diğer yöntemlere geçireceksiniz Listve daha sonra bu belgeleri yine de kaybettiniz.
Christoffer Hammarström

23

Bir fabrika yöntemi oluşturabilirsiniz:

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");

Ama ilk yeniden düzenlemeden daha iyi değil.

Daha fazla esneklik için genel olabilir:

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

1
Orijinal gönderiye tekrar bakın , 7 ek satır değil , bir satırda dizi başlatmayı istiyor .
L. Holanda

7
@LeoHolanda: Her küçük şey için fabrika yöntemleri oluşturmak çok fazla, katılıyorum. Ama bağlı ve bu yöntem kullanılmak üzere gidiyor sayısına ilişkin durum hakkında, onu oluşturmak için mantıklı olabilir. Ekstra soyutlama katmanları oluşturmak , tasarımcının amacını yakalayan daha anlamlı yöntemler oluşturarak karmaşıklığı ortadan kaldırmak içindir .
Jordão


8

Bunu yapmanın en kompakt yolu:

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

8

Aşağıdaki kodu aşağıdaki gibi kullanmanız yeterlidir.

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

2
@bsd Herhangi bir yöntem girmeden önce listeyi bildirmek için bu yöntemi kullanabilirsiniz. Sınıf değişkenleri tanımlanırken içerik, bir yöntem çağırmak zorunda kalmadan listeye eklenebilir.
melwil

2
çift ​​parantez başlatmadan mümkün olduğunca kaçınılmalıdır. bkz. stackoverflow.com/a/924326/760393
Raúl

8

Eclipse Collections ile aşağıdakileri yazabilirsiniz:

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

Ayrıca, türler ve bunların Değişebilir veya Değişken olup olmadığı konusunda daha spesifik olabilirsiniz.

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

Aynı şeyi Setler ve Çantalar için de yapabilirsiniz:

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");

Not: Eclipse Collections için bir komisyoncuyum.


7

İşte başka bir yol:

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

7

(Bir yorum olmalı, ancak çok uzun, bu yüzden yeni cevap). Diğerlerinin de belirttiği gibi, Arrays.asListyöntem sabit boyuttadır, ancak bununla ilgili tek sorun değildir. Ayrıca kalıtımla da çok iyi başa çıkmaz. Örneğin, aşağıdakilere sahip olduğunuzu varsayalım:

class A{}
class B extends A{}

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

Yukarıdaki bir derleyici hatasıyla sonuçlanır, çünkü List<B>(Arrays.asList tarafından döndürülen budur), List<A>bir List<A>nesneye B tipi Nesneler ekleyebilmenize rağmen, bir alt sınıfı değildir . Bunun üstesinden gelmek için şöyle bir şey yapmanız gerekir:

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

Muhtemelen bunu yapmanın en iyi yolu, esp. sınırsız bir listeye ihtiyacınız varsa veya miras kullanmanız gerekiyorsa.


6

Aşağıdaki ifadeleri kullanabilirsiniz:

Kod Parçacığı:

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

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

Kompakt bir çözüme sahip olmak için ilk ifadeyi satır içine alabilirsiniz:letters = Arrays.asList(new String[]{"A", "B", "C"});
Pavel Repin

5

Gibi dedi Tom :

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

Ancak bir ArrayList istemekten şikayet ettiğiniz için, öncelikle ArrayList'in bir List'in alt sınıfı olduğunu bilmelisiniz ve bu satırı ekleyebilirsiniz:

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

Yine de, bu sizi 'performanstan' şikayet edebilir.

Bu durumda benim için bir anlam ifade etmiyor, neden, listeniz önceden tanımlandığı için bir dizi olarak tanımlanmadı (boyut, başlatma sırasında bilindiği için). Ve bu sizin için bir seçenekse:

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

Küçük performans farklarıyla ilgilenmiyorsanız, bir diziyi ArrayList'e çok basit bir şekilde kopyalayabilirsiniz:

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

Tamam, ancak gelecekte yer adından biraz daha fazlasına ihtiyacınız var, ülke koduna da ihtiyacınız var. Bunun hala çalışma süresi boyunca asla değişmeyecek önceden tanımlanmış bir liste olduğunu varsayarsak enum, gelecekte listenin değiştirilmesi gerekirse yeniden derleme gerektiren bir küme kullanmak uygundur .

enum Places {BUENOS_AIRES, CORDOBA, LA_PLATA}

olacaktı:

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;
    }
}

Enum'ların valuesenum değerlerinin tümünü bildirildikleri sırayla içeren bir dizi döndüren statik bir yöntemi vardır,

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

Bu durumda, ArrayList'inize ihtiyacınız olmayacak sanırım.

PS Randyaa, Collections.addAll statik yardımcı yöntemini kullanarak başka bir güzel yol gösterdi .


5

Java 9 değişmez bir liste oluşturmak için aşağıdaki yönteme sahiptir :

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

gerekirse değiştirilebilir bir liste oluşturmak için kolayca uyarlanabilir:

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

Benzer yöntemler mevcuttur Setve Map.


1
Açıkça "değişmez liste" demeniz ve daha sonra değişebilir listenin başka bir örneğini göstermeniz iyi olur, çünkü ne zaman kullanılacağını netleştirir.
Cherit


4

Evet, Diziler yardımıyla dizi listesini bir satırda başlatabilirsiniz,

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

4

Sen kullanabilirsiniz StickyListgelen Cactoos :

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


2

Java'da yapamazsınız

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

Belirtildiği gibi, çift ayraç başlatma yapmanız gerekir:

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

Ancak bu sizi ek açıklama eklemeye zorlayabilir @SuppressWarnings("serial")veya can sıkıcı bir seri UUID oluşturabilir. Ayrıca çoğu kod formatlayıcı bunu birden çok ifadeye / satıra dönüştürecektir.

Alternatif olarak

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

ama sonra bir @SuppressWarnings("unchecked").

Ayrıca javadoc'a göre bunu yapabilmelisiniz:

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

Ancak JDK 1.6 ile derlemesini sağlayamıyorum.


5
Yanlış! Sen edebilirsiniz ilk satırı yapmak ve bu Btw doğru cevabı olduğunu
Bohemian

1
Collections.singletonList(messageBody)

Bir öğeden oluşan bir listeye sahip olmanız gerekiyorsa !

Koleksiyonları dan java.util paketinde.


1

Bunu yapmanın en iyi yolu:

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);
    }
}

İstediğiniz kadar öğeye sahip olabilen bir işlev oluşturun ve bunları tek bir satıra eklemek için arayın.


1
Eğer tüm sorunların üstesinden gelirseniz, bunu düz kullanmak yerine bir şablon yöntemi yapabilirsiniz Object.
Robert

1

İşte AbacusUtil kodu

// 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");

Beyan : AbacusUtil'in geliştiricisiyim.


0

Benim için Arrays.asList () en iyi ve kullanışlı olanıdır. Her zaman bu şekilde başlatmayı severim. Java Koleksiyonlarına yeni başlayan biriyseniz, ArrayList başlatmaya başvurmanızı rica ediyorum


Arrays.asList () neden add()yöntemlerle bir satırda yeni bir ArrayList oluşturmaktan daha iyi ?
IgorGanapolsky

0

Neden bunu yapan basit bir yardımcı program işlevi yapmıyorsunuz?

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

" ll", "gerçek liste" anlamına gelir.

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

0

ilginç bir şekilde, diğer aşırı yüklenmiş yönteme sahip tek bir astar Stream::collect listelenmemiştir

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

-1

Aslında, bunu bir satırda yapmak mümkündür:

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

3
Bunun soruya ne kattığını sorabilir miyim? Bu cevap zaten diğer cevaplar tarafından defalarca kapsanmaktadır.
Gizemli

Bu bir ÖZET LİSTESİ oluşturduğu için gerçekten kötü bir çözümdür. Kapsayıcıya başka bir şey ekleyemezsiniz.
Atais
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.