基本上我有一个位置的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
最简单的方法是什么?我觉得我现在不想直接思考。
答案 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参数