How to convert int[] to Integer[] in Java?
I'm new to Java and very confused.
I have a large dataset of length 4 int[]
and I want to count the number of times
that each particular combination of 4 integers occurs. This is very similar to counting word frequencies in a document.
I want to create a Map<int[], double>
that maps each int[] to a running count as the list is iterated over, but Map doesn't take primitive types.
so I made Map<Integer[], Double>
my data is stored as an ArrayList<int[]>
so my loop should be something like
ArrayList<int[]> data = ... // load a dataset`
Map<Integer[], Double> frequencies = new HashMap<Integer[], Double>();
for(int[] q : data) {
// **DO SOMETHING TO convert q from int[] to Integer[] so I can put it in the map
if(frequencies.containsKey(q)) {
frequencies.put(q, tfs.get(q) + p);
} else {
frequencies.put(q, p);
}
}
I'm not sure what code I need at the comment to make this work to convert an int[]
to an Integer[]
. Or maybe I'm fundamentally confused about the right way to do this.
Solution 1:
Native Java 8 (one line)
With Java 8, int[]
can be converted to Integer[]
easily:
int[] data = {1,2,3,4,5,6,7,8,9,10};
// To boxed array
Integer[] what = Arrays.stream( data ).boxed().toArray( Integer[]::new );
Integer[] ever = IntStream.of( data ).boxed().toArray( Integer[]::new );
// To boxed list
List<Integer> you = Arrays.stream( data ).boxed().collect( Collectors.toList() );
List<Integer> like = IntStream.of( data ).boxed().collect( Collectors.toList() );
As others stated, Integer[]
is usually not a good map key.
But as far as conversion goes, we now have a relatively clean and native code.
Solution 2:
If you want to convert an int[]
to an Integer[]
, there isn't an automated way to do it in the JDK. However, you can do something like this:
int[] oldArray;
... // Here you would assign and fill oldArray
Integer[] newArray = new Integer[oldArray.length];
int i = 0;
for (int value : oldArray) {
newArray[i++] = Integer.valueOf(value);
}
If you have access to the Apache lang library, then you can use the ArrayUtils.toObject(int[])
method like this:
Integer[] newArray = ArrayUtils.toObject(oldArray);