in the Android Java world, is there a straighforward (ideally one-call) way to convert an array of int
to an ArrayList<Integer>
and back? Calling toArray()
on the ArrayList returns an array of Integer
- not quite what I want.
I can easily do that by hand with a loop (already did, in fact). I'm wondering if the library/language supports the same.
EDIT: thanks all, I already wrote my own boxer and unboxer. I'm just surprised the language/RTL designers didn't think of it themselves, especially with primitive types being by design ineligible for collections.
Using Guava (Ints.asList(int...) and Ints.toArray(Collection<Integer>)):
int[] intArray = ...
List<Integer> intArrayAsList = Ints.asList(intArray);
int[] intArray2 = Ints.toArray(intArrayAsList);
Note that like Arrays.asList
, Ints.asList
returns a list that is a view of the given array. You can't add to or remove from it, but you can set
the value at a specific index. You can also copy it to a new ArrayList
if you want:
List<Integer> arrayList = Lists.newArrayList(Ints.asList(intArray));
Guava has the same methods for all primitive types.
Boxing and unboxing (without special libraries):
// Necessary Imports:
import java.util.*;
import java.util.stream.*;
// Integers:
int[] primitives = {1, 2, 3};
Integer[] boxed = Arrays.stream(primitives).boxed().toArray(Integer[]::new);
int[] unboxed = Arrays.stream(boxed).mapToInt(Integer::intValue).toArray();
// Doubles:
double[] primitives = {1.0, 2.0, 3.0};
Double[] boxed = Arrays.stream(primitives).boxed().toArray(Double[]::new);
double[] unboxed = Arrays.stream(boxed).mapToDouble(Double::doubleValue).toArray();
Note that this requires Java 8 (Stream Documentation).
For anyone unaware of what the ::
means, it's used to make a Method Reference.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With