基本上我有一个位置的 ArrayList:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
在此之下,我调用以下方法:
.getMap();
getMap() 方法中的参数是:
getMap(WorldLocation... locations)
我遇到的问题是我不确定如何将 locations
的整个列表传递给该方法。
我试过了
.getMap(locations.toArray())
但 getMap 不接受,因为它不接受 Objects[]。
现在如果我使用
.getMap(locations.get(0));
它会完美运行......但我需要以某种方式传递所有位置......我当然可以继续添加 locations.get(1), locations.get(2)
等,但数组的大小会有所不同。我只是不习惯 ArrayList
的整个概念
解决这个问题的最简单方法是什么?我觉得我现在只是没有直接思考。
来源文章:Passing a list as an argument to a vararg method
使用 toArray(T[] arr)
方法。
.getMap(locations.toArray(new WorldLocation[0]))
这是一个完整的例子:
public static void method(String... strs) {
for (String s : strs)
System.out.println(s);
}
...
List<String> strs = new ArrayList<String>();
strs.add("hello");
strs.add("world");
method(strs.toArray(new String[0]));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
在 Java 8 中:
List<WorldLocation> locations = new ArrayList<>();
.getMap(locations.stream().toArray(WorldLocation[]::new));
locations.toArray(WorldLocations[]::new)
似乎也有效(没有 .stream()
)
IntFunction
的重载,它是在 Java 11 中添加的 :) docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/…
使用番石榴的接受答案的较短版本:
.getMap(Iterables.toArray(locations, WorldLocation.class));
可以通过静态导入 toArray 进一步缩短:
import static com.google.common.collect.toArray;
// ...
.getMap(toArray(locations, WorldLocation.class));
List
数组,但无法实例化通用数组以使用 Array.toArray
。
List.toArray
你可以做:
getMap(locations.toArray(new WorldLocation[locations.size()]));
或者
getMap(locations.toArray(new WorldLocation[0]));
或者
getMap(new WorldLocation[locations.size()]);
@SuppressWarnings("unchecked")
是删除 ide 警告所必需的。
虽然在这里标记为已解决,但我的 KOTLIN RESOLUTION
fun log(properties: Map<String, Any>) {
val propertyPairsList = properties.map { Pair(it.key, it.value) }
val bundle = bundleOf(*propertyPairsList.toTypedArray())
}
bundleOf 具有可变参数
java
someMethod(someList.toArray(new ArrayList<Something>[someList.size()]))
会给你一个非常烦人的警告(因为你可以为整个函数取消它,或者你必须在一个额外的步骤中创建数组并取消警告您存储它的变量。