非常有用的Arrays.asList()
:
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
但是没有Arrays.array()
:
public static <T> T[] array(T... values) {
return values;
}
虽然绝对是微不足道的,但这将是构建数组的一种非常方便的方法:
String[] strings1 = array("1", "1", "2", "3", "5", "8");
// as opposed to the slightly more verbose
String[] strings2 = new String[] { "1", "1", "2", "3", "5", "8" };
// Of course, you can assign array literals like this
String[] strings3 = { "1", "1", "2", "3", "5", "8" };
// But you can't pass array literals to methods:
void x(String[] args);
// doesn't work
x({ "1", "1", "2", "3", "5", "8" });
// this would
x(array("1", "1", "2", "3", "5", "8"));
在java.util.Arrays
之外的Java语言中是否存在其他任何方法?
答案 0 :(得分:3)
您可以从ArrayUtils看到Apache Commons。您必须使用lib 3.0或更高版本。
示例:
String[] array = ArrayUtils.toArray("1", "2");
String[] emptyArray = ArrayUtils.<String>toArray();
答案 1 :(得分:1)
在我看来,Java中确实没有array()
方法。如果你想要更简洁,就像你说的那样你可以使用文字。或者在方法参数中,您可以使用varargs(根本不需要数组)。根据您的标题,这是您想要做的。你可以这样做:
public static void doThings(String... values) {
System.out.println(values[0]);
}
doThings("This", "needs", "no", "array");
只有当方法签名实际上有一个数组时,你才需要指定new String[]
,这在我看来并不是太多额外的写作。
编辑:您似乎想要使用数组作为参数调用方法的详细方法。我不会只添加一行方法的外部库。这可以用于例如:
public static <T> T[] toArr(T... values) {
return values;
}
yourMethod(toArr("1", "2", "3"));
答案 2 :(得分:1)
来自Apache Commons Lang(v3.0或更高版本)的ArrayUtils:
String[] array = ArrayUtils.toArray("1", "2");
String[] emptyArray = ArrayUtils.<String>toArray();
...或者只是从Apache获取代码并实现“自己”:
public static <T> T[] toArray(final T... items) {
return items;
}
答案 3 :(得分:1)
如果你想要比
更短的东西x(new String[] {"1", "1", "2", "3", "5", "8"});
我使用下面比列表本身更短的内容。
x("1,1,2,3,5,8".split(","));
// {"1", "1", "2", "3", "5", "8"}
它不使用任何其他库。
假设你想要密钥和值,你仍然可以使用varargs
public static <K,V> Map<K, V> asMap(K k, V v, Object ... keysAndValues) {
Map<K,V> map = new LinkedHashMap<K, V>();
map.put(k, v);
for(int i=0;i<keysAndValues.length;i+=2)
map.put((K) keysAndValues[i], (V) keysAndValues[i+1]);
return map;
}