[英]Java Equivalent of C# Anonymous Arrays and Lists?
當我需要將它們傳遞給函數時,C#允許我動態創建數組。 假設我有一個名為findMiddleItem(String[] items)
。 在C#中,我可以編寫如下代碼:
findMiddleItem(new String[] { "one", "two", "three" });
這太棒了,因為這意味着我不必寫:
IList<String> strings = new List<String>();
strings.add("one");
strings.add("two");
strings.add("three");
findMiddleItem(strings.ToArray());
這很糟糕,因為我並不真正關心strings
- 它只是一個讓我將字符串數組傳遞給需要它的方法的構造。 一種我無法修改的方法。
那么你如何用Java做到這一點? 我需要知道數組類型(例如String [])以及泛型類型(例如List)。
List和Array是根本不同的東西。
List
是Collection
類型,是接口的實現。
Array是一種特殊的操作系統特定數據結構,只能通過特殊語法或本機代碼創建。
在Java中,數組語法與您描述的語法相同:
String[] array = new String[] { "one", "two", "three" };
參考: Java教程>數組
創建List的最簡單方法是:
List<String> list = Arrays.asList("one", "two", "three");
但是,結果列表將是不可變的(或者至少它不支持add()
或remove()
),因此您可以使用ArrayList構造函數調用來包裝調用:
new ArrayList<String>(Arrays.asList("one", "two", "three"));
正如Jon Skeet所說,它與番石榴相比更漂亮,你可以做到:
Lists.newArrayList("one", "two", "three");
參考: Java Tutorial > The List Interface
, Lists
(guava javadocs)
關於這個評論:
如果我們能夠做findMiddleItem({“one”,“two”,“three”})會很好;
Java varargs為您提供了更好的交易:
public void findMiddleItem(String ... args){
//
}
你可以使用可變數量的參數調用它:
findMiddleItem("one");
findMiddleItem("one", "two");
findMiddleItem("one", "two", "three");
或者使用數組:
findMiddleItem(new String[]{"one", "two", "three"});
你可以用完全相同的方式做到:
findMiddleItem(new String[] { "one", "two", "three" });
在Java中有效。 假設findMiddleItem
定義為:
findMiddleItem(String[] array)
在Java中,您可以以相同的方式構造數組:
findMiddleItem(new String[] { "one", "two", "three" });
你不能以完全相同的方式構造List<T>
,但是有各種方法可以解決這個問題,例如包裝數組或使用一些Guava Lists.*
方法。 (您嘗試使用IList<string>
類型的參數調用findMiddleItem
代碼將不會編譯,因為IList<string>
不一定是string[]
。)例如,如果findMiddleItem
實際上具有List<String>
類型的參數您可以使用List<String>
:
findMiddleItem(Lists.newArrayList("one", "two", "three"));
除了沒有集合初始化器(或對象初始化器)之外,Java 也沒有隱式類型化的數組......您的原始C#代碼可以在C#3及更高版本中壓縮:
findMiddleItem(new[] { "one", "two", "three" });
與C# findMiddleItem(new String[] { "one", "two", "three" })
;
此外,為了將來參考,您可以用稍微冗長的方式在Java中構建List * :
List<String> myStringList = new ArrayList<String>() {{
add("a");
add("b");
add("c");
}};
*正如Sean所指出的,這可以被認為是不好的做法,因為它確實創建了一個ArrayList
的匿名子類。
我認為這是Java中完全相同的語法。 這有效:
public class Main
{
public static void main( String[] args )
{
method1( new String[] {"this", "is", "a", "test"} );
}
private static void method1( String[] params )
{
for( String string : params )
System.out.println( string );
}
}
我認為這也適用於非靜態方法。
除了使用vargs之外
findMiddleItem("one", "two", "three", "four", "five");
你可以做
findMiddleItem("one,two,three,four,five".split(","));
編輯:要將String轉換為List,您可以使用輔助方法。
public static List<String> list(String text) {
return Arrays.asList(text.split(","));
}
findMiddleItem(list("one,two,three,four,five"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.