web-dev-qa-db-ja.com

ArrayListをvarargsメソッドパラメーターに渡す方法は?

基本的に、場所の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の概念全体に慣れていない

これについて最も簡単な方法は何でしょうか?今はまっすぐ考えていないように感じます。

180
MJ93

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

271
aioobe

Java 8の場合:

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

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

Guavaを使用した受け入れられた回答の短縮版:

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

toArrayを静的にインポートすることでさらに短縮できます:

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

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

できること:getMap(locations.toArray(new WorldLocation[locations.size()]));またはgetMap(locations.toArray(new WorldLocation[0]));またはgetMap(new WorldLocation[locations.size()]);

ide警告を削除するには、@ SuppressWarnings( "unchecked")が必要です。

0
Imar