Best way to create singleton array

JavaArrays

Java Problem Overview


What is the "easiest" way for you to create a singleton (with exactly one element) Objects array in Java ?

Java Solutions


Solution 1 - Java

Object [] singleton = { new SomeObject() };

Solution 2 - Java

The standard way is this:

String[] arr = new String[]{"I am the one and only"};

I'm afraid it doesn't get much simpler than this.

Edit: it does:

String[] arr = {"I am the one and only"};

Thanks aioobe, I keep forgetting this.


Of course if you often create array you can create a helper method that makes things a bit simpler:

public static <T> T[] asArray(T... items){
    return items;
}

String[] arr = asArray("I am the one and only");

(But you can't enforce at compile time that it will be an array with only one element)


Next I was going to write a singleton array method, but Stephen beat me to that.

Solution 3 - Java

If your project is already using Apache Commons lib, you can stick to ArrayUtils.toArray() method.

String[] arr = ArrayUtils.toArray("The string");
// or if using static import
String[] arr = toArray("The string");

Even if using static import it is still more verbose than the accepted answer:

String[] arr = {"The string"};

But it comes very handy when compact array initializer syntax is not allowed.

Some examples:

someMethod(toArray("The string"), /* other params */);

return toArray("The string");

@DataProvider
public Object[][] someDataProvider() {
    return rangeClosed(-12, +12)
        .map(HOURS::toMillis).boxed()
        .map(ArrayUtils::toArray)
        .toArray(Object[][]::new);
}

You can imagine any other examples yourself.

Also note, that the ArrayUtils.toArray() can wrap an arbitrary number of objects into array, not only a single one.

Solution 4 - Java

enum solution(anti reflect attack):

enum MySingleton{
	INSTANCE(new String[]{"a","b"});
	
	final String[] values;

	private MySingleton(String[] values) {
		this.values = values;
	}
}

reference it as:

MySingleton.INSTANCE;

Solution 5 - Java

This should do the job

public SomeType[] makeSingletonArray(SomeType elem) {
    return new SomeType[]{elem};
}

A generic version of this method would be somewhat awkward to use, since you would need to pass it a Class object as an additional parameter.

Inlining the SomeType[]{elem} expression is simpler, and that's how I'd normally do this.

Solution 6 - Java

You could do this:

String[] a = Collections.singletonList("SingleElement").toArray();

Edit: Whoops! The above example doesn't compile. As stated in the comment, this can be done either as:

Object[] a = Collections.singletonList("SingleElement").toArray();
Or
String[] a = Collections.singletonList("SingleElement").toArray(new String[1]);

Solution 7 - Java

Arrays in Java are mutable.

But if you want to create a single object in an array, you can do like this:

Object[] objArray = new Object[] { put your object here };

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionManuel SelvaView Question on Stackoverflow
Solution 1 - JavaKristofMolsView Answer on Stackoverflow
Solution 2 - JavaSean Patrick FloydView Answer on Stackoverflow
Solution 3 - JavaYoory N.View Answer on Stackoverflow
Solution 4 - Java卢声远 Shengyuan LuView Answer on Stackoverflow
Solution 5 - JavaStephen CView Answer on Stackoverflow
Solution 6 - JavaNate W.View Answer on Stackoverflow
Solution 7 - JavaMahdi RezguiView Answer on Stackoverflow