Reputation: 5296
Basically I have an ArrayList of locations:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
below this I call the following method:
.getMap();
the parameters in the getMap() method are:
getMap(WorldLocation... locations)
The problem I'm having is I'm not sure how to pass in the WHOLE list of locations
into that method.
I've tried
.getMap(locations.toArray())
but getMap doesn't accept that because it doesn't accept Objects[].
Now if I use
.getMap(locations.get(0));
it will work perfectly... but I need to somehow pass in ALL of the locations... I could of course make keep adding locations.get(1), locations.get(2)
etc. but the size of the array varies. I'm just not use to the whole concept of an ArrayList
What would be the easiest way to go about this? I feel like I'm just not thinking straight right now.
Upvotes: 377
Views: 254018
Reputation: 421310
Use the toArray(T[] arr)
method.
.getMap(locations.toArray(new WorldLocation[0]))
Here's a complete example:
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]));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
Upvotes: 492
Reputation: 11637
If by any chance you're looking up this in order to pass varargs to Mockito's when(..).thenReturn(...varargs)
, then check this answer employing AdditionalAnswers.returnsElementsOf(..)
Upvotes: 0
Reputation: 1870
Though it is marked as resolved here my KOTLIN RESOLUTION
fun log(properties: Map<String, Any>) {
val propertyPairsList = properties.map { Pair(it.key, it.value) }
val bundle = bundleOf(*propertyPairsList.toTypedArray())
}
bundleOf has vararg parameter
Upvotes: 1
Reputation: 599
You can do:
getMap(locations.toArray(new WorldLocation[locations.size()]));
or
getMap(locations.toArray(new WorldLocation[0]));
or
getMap(new WorldLocation[locations.size()]);
@SuppressWarnings("unchecked")
is needed to remove the ide warning.
Upvotes: 3
Reputation: 4649
In Java 8:
List<WorldLocation> locations = new ArrayList<>();
.getMap(locations.stream().toArray(WorldLocation[]::new));
Upvotes: 96
Reputation: 10695
A shorter version of the accepted answer using Guava:
.getMap(Iterables.toArray(locations, WorldLocation.class));
can be shortened further by statically importing toArray:
import static com.google.common.collect.toArray;
// ...
.getMap(toArray(locations, WorldLocation.class));
Upvotes: 17