Saturday, 5 November 2022

Convert a wrapper array to primitive array in Java

Write a program to convert the wrapper array to primitive array in Java. For example, for the Integer[] array, you should return int[].

 

Step 1: Write a function that return a primitive type equivalent to the given wrapper type.

private static final Map<Class<?>, Class<?>> WRAPPER_TO_PRIMITIVE;

static {
	WRAPPER_TO_PRIMITIVE = new LinkedHashMap<>();

	WRAPPER_TO_PRIMITIVE.put(Byte.class, byte.class);
	WRAPPER_TO_PRIMITIVE.put(Short.class, short.class);
	WRAPPER_TO_PRIMITIVE.put(Integer.class, int.class);
	WRAPPER_TO_PRIMITIVE.put(Long.class, long.class);
	WRAPPER_TO_PRIMITIVE.put(Float.class, float.class);
	WRAPPER_TO_PRIMITIVE.put(Double.class, double.class);
	WRAPPER_TO_PRIMITIVE.put(Boolean.class, boolean.class);
	WRAPPER_TO_PRIMITIVE.put(Character.class, char.class);
}

public static Class<?> getPrimitiveType(final Class<?> wrapperType) {
	final Class<?> primitiveType = WRAPPER_TO_PRIMITIVE.get(wrapperType);

	if (primitiveType == null) {
		throw new IllegalArgumentException("Given type is not a wrapper type");
	}

	return primitiveType;
}

Step 2: Get the component type of wrapper array.

Class<?> wrapperArrayClazz = wrapperArray.getClass();
Class<?> wrapperArrayComponentType = wrapperArrayClazz.getComponentType();

Step 3: Find the equivalent primitive type from the wrapper array component type.

Class<?> primitiveType = getPrimitiveType(wrapperArrayComponentType);

Step 4: Define primitive array and copy the elements one by one.

int length = Array.getLength(wrapperArray);
Object primitiveArray = Array.newInstance(primitiveType, length);
for (int i = 0; i < length; i++) {
	Object ele = Array.get(wrapperArray, i);
	Array.set(primitiveArray, i, ele);
}

Find the below working application.

 


ArrayWrapperToPrimitiveDemo.java

package com.sample.app.arrays;

import java.lang.reflect.Array;
import java.util.LinkedHashMap;
import java.util.Map;

public class ArrayWrapperToPrimitiveDemo {

	private static final Map<Class<?>, Class<?>> WRAPPER_TO_PRIMITIVE;

	static {
		WRAPPER_TO_PRIMITIVE = new LinkedHashMap<>();

		WRAPPER_TO_PRIMITIVE.put(Byte.class, byte.class);
		WRAPPER_TO_PRIMITIVE.put(Short.class, short.class);
		WRAPPER_TO_PRIMITIVE.put(Integer.class, int.class);
		WRAPPER_TO_PRIMITIVE.put(Long.class, long.class);
		WRAPPER_TO_PRIMITIVE.put(Float.class, float.class);
		WRAPPER_TO_PRIMITIVE.put(Double.class, double.class);
		WRAPPER_TO_PRIMITIVE.put(Boolean.class, boolean.class);
		WRAPPER_TO_PRIMITIVE.put(Character.class, char.class);
	}

	public static Class<?> getPrimitiveType(final Class<?> wrapperType) {
		final Class<?> primitiveType = WRAPPER_TO_PRIMITIVE.get(wrapperType);

		if (primitiveType == null) {
			throw new IllegalArgumentException("Given type is not a wrapper type");
		}

		return primitiveType;
	}

	public static Object toPrimitiveArray(final Object wrapperArray) {

		if (wrapperArray == null) {
			throw new IllegalArgumentException("Wrapper array cannot be null");
		}

		final Class<?> wrapperArrayClazz = wrapperArray.getClass();
		if (!wrapperArrayClazz.isArray()) {
			throw new IllegalArgumentException("Given input is not an array");
		}

		final Class<?> wrapperArrayComponentType = wrapperArrayClazz.getComponentType();
		final Class<?> primitiveType = getPrimitiveType(wrapperArrayComponentType);
		final int length = Array.getLength(wrapperArray);

		final Object primitiveArray = Array.newInstance(primitiveType, length);
		for (int i = 0; i < length; i++) {
			final Object ele = Array.get(wrapperArray, i);
			Array.set(primitiveArray, i, ele);
		}
		return primitiveArray;
	}

	public static void main(String[] args) {
		Integer[] primes = new Integer[] { 2, 3, 5, 7, 11 };

		int[] primesPrimitiveArray = (int[]) toPrimitiveArray(primes);

		for (int i : primesPrimitiveArray) {
			System.out.println(i);
		}
	}
}

Output

2
3
5
7
11


You may like

Interview Questions

Array programs in Java

Generic method to concatenate two arrays in Java

Get the string representation of array by given delimiter in Java

Get an iterator from array in Java

Get reverse iterator for the given array in Java

Convert primitive array to wrapper array in Java

No comments:

Post a Comment