在C#中,我可以創建某種類型的集合並使用同一行上的數據進行初始化。如何初始化集合並在同一行上添加數據?
var foo = new List<string> {"one","two","three"};
是否有一個等同的方式在Java中做到這一點?
在C#中,我可以創建某種類型的集合並使用同一行上的數據進行初始化。如何初始化集合並在同一行上添加數據?
var foo = new List<string> {"one","two","three"};
是否有一個等同的方式在Java中做到這一點?
如果你需要一個只讀List
List<String> numbers = Arrays.asList("one","two","three");
// Can't add since the list is immutable
numbers.add("four"); // java.lang.UnsupportedOperationException
如果您想上修改的List
以後。
List<String> numbers2 = new ArrayList<String>(
Arrays.asList("one","two","three"));
numbers2.add("four");
System.out.println(numbers2); // [one, two, three, four]
List<String> list = Arrays.asList("one","two","three")
這使得產生的'List'不可變。 –
好吧然後'新ArrayList
現在你已經創建了一個列表和一個數組以及數組的列表包裝,當所有這些需要的是一個數組... –
List<String> foo = Arrays.asList("one","two","three");
正如鮑里斯在評論中提到所產生的List
是不變的(即只讀)。您需要將其轉換爲ArrayList
或類似,以修改集合:
List<String> foo = new ArrayList<String>() {
{
add("one");
add("two");
add("three");
}
};
這使得生成的List不可變。 –
List<String> numbers = Arrays.asList("one","two","three");
由於鮑里斯:
List<String> foo = new ArrayList<String>(Arrays.asList("one","two","three"));
您也可以使用匿名子類,並初始化創建List
評論說,它使你的numbers
不可變。
是的,你可以,但有兩條線。
List<String> numbers= new ArrayList<String>();
Collections.addAll(numbers,"one","two","three");
如果你仍然想在只有一條線,隨着Gauva
List<String> numbers= Lists.newArrayList("one","two","three");
,我已經能夠拿出的最好的是:
final List<String> foo = new ArrayList<String>() {{
add("one");
add("two");
add("three");
}};
基本上,說您正在創建一個ArrayList
類的匿名子類,然後使用"one", "two", "three"
進行靜態初始化。
此問題適用於Java。 –
沒有理由創建一個匿名類來避免幾行代碼。 –
對不起,最近我一直在研究一些過多的javascript。 –
我更喜歡使用的番石榴(以前稱爲谷歌集合)庫,這既消除了需要重新寫入類型下來,並擁有所有種類的添加數據直線距離的方式這樣做。
例子:List<YourClass> yourList = Lists.newArrayList();
或者添加數據:List<YourClass> yourList = Lists.newArrayList(yourClass1, yourclass2);
所有其他類型的集合和他們的各種實現同樣的作品。又如:Set<String> treeSet = Sets.newTreeSet();
您可以從downvoter https://code.google.com/p/guava-libraries/
評論發現呢? – Joe
可能是因爲這個問題有很多重複的內容很容易搜索。 –
我搜索了。由於某種原因沒有彈出。我將刪除它 – Joe