MJ9*_*J93 205 java variadic-functions
基本上我有一个位置的ArrayList:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
Run Code Online (Sandbox Code Playgroud)
下面我称之为以下方法:
.getMap();
Run Code Online (Sandbox Code Playgroud)
getMap()方法中的参数是:
getMap(WorldLocation... locations)
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我不确定如何将整个列表locations
传入该方法.
我试过了
.getMap(locations.toArray())
Run Code Online (Sandbox Code Playgroud)
但getMap不接受,因为它不接受Objects [].
现在,如果我使用
.getMap(locations.get(0));
Run Code Online (Sandbox Code Playgroud)
它会完美地工作......但我需要以某种方式传递所有位置...我当然可以继续添加locations.get(1), locations.get(2)
等等但是阵列的大小各不相同.我只是不习惯整个概念ArrayList
最简单的方法是什么?我觉得我现在不想直接思考.
aio*_*obe 300
使用该toArray(T[] arr)
方法.
.getMap(locations.toArray(new WorldLocation[locations.size()]))
Run Code Online (Sandbox Code Playgroud)
(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()]));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
Run Code Online (Sandbox Code Playgroud)
该帖子已被改写为一篇文章在这里.
jmh*_*let 31
在Java 8中:
List<WorldLocation> locations = new ArrayList<>();
.getMap(locations.stream().toArray(WorldLocation[]::new));
Run Code Online (Sandbox Code Playgroud)
tkr*_*use 11
使用Guava接受的答案的较短版本:
.getMap(Iterables.toArray(locations, WorldLocation.class));
Run Code Online (Sandbox Code Playgroud)
可以通过静态导入toArray进一步缩短:
import static com.google.common.collect.toArray;
// ...
.getMap(toArray(locations, WorldLocation.class));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
105152 次 |
最近记录: |