如何将ArrayList传递给varargs方法参数?

时间:2012-03-25 20:26:25

标签: java variadic-functions

基本上我有一个位置的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

的整个概念

最简单的方法是什么?我觉得我现在不想直接思考。

5 个答案:

答案 0 :(得分:268)

使用toArray(T[] arr)方法。

.getMap(locations.toArray(new WorldLocation[locations.size()]))

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

    method(strs.toArray(new String[strs.size()]));
    //     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...

此帖子已被重写为文章here

答案 1 :(得分:24)

在Java 8中:

List<WorldLocation> locations = new ArrayList<>();

.getMap(locations.stream().toArray(WorldLocation[]::new));

答案 2 :(得分:7)

使用Guava接受的答案的缩短版本:

.getMap(Iterables.toArray(locations, WorldLocation.class));
静态导入toArray可以进一步缩短

import static com.google.common.collect.toArray;
// ...

    .getMap(toArray(locations, WorldLocation.class));

答案 3 :(得分:0)

您可以执行以下操作:getMap(locations.toArray(new WorldLocation[locations.size()]));getMap(locations.toArray(new WorldLocation[0]));getMap(new WorldLocation[locations.size()]);

@SuppressWarnings(“未选中”)需要删除ide警告。

答案 4 :(得分:-2)

尽管此处标记为已解决,但我的科特林决议

fun log(properties: Map<String, Any>) {
    val propertyPairsList = properties.map { Pair(it.key, it.value) }
    val bundle = bundleOf(*propertyPairsList.toTypedArray())
}

bundleOf具有vararg参数