Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the shortest way to initialize List of strings in java?

I am searching for the shortest way (in code) to initialize list of strings and array of strings, i.e. list/array containing "s1", "s2", "s3" string elements.

like image 607
Vladimir Avatar asked Jun 29 '11 12:06

Vladimir


People also ask

Can you initialize a list in Java?

Since list is an interface, one can't directly instantiate it. However, one can create objects of those classes which have implemented this interface and instantiate them. Few classes which have implemented the List interface are Stack, ArrayList, LinkedList, Vector etc.

How do you create a short list in Java?

Unfortunately, there is no short way to make them short . But you can always cast them: List<Short> numbers = new ArrayList<>(List.


2 Answers

There are various options. Personally I like using Guava:

List<String> strings = Lists.newArrayList("s1", "s2", "s3"); 

(Guava's a library worth having anyway, of course :)

Using just the JDK, you could use:

List<String> strings = Arrays.asList("s1", "s2", "s3"); 

Note that this will return an ArrayList, but that's not the normal java.util.ArrayList - it's an internal one which is mutable but fixed-size.

Personally I prefer the Guava version as it makes it clear what's going on (the list implementation which will be returned). It's also still clear what's going on if you statically import the method:

// import static com.google.common.collect.Lists.newArrayList; List<String> strings = newArrayList("s1", "s2", "s3"); 

... whereas if you statically import asList it looks a little odder.

Another Guava option, if you don't want a modifiable-in-any-way list:

ImmutableList<String> strings = ImmutableList.of("s1", "s2", "s3"); 

I typically want to either have a completely mutable list (in which case Lists.newArrayList is best) or a completely immutable list (in which case ImmutableList.of is best). It's rare that I really want a mutable-but-fixed-size list.

like image 200
Jon Skeet Avatar answered Oct 12 '22 00:10

Jon Skeet


Java 9+

Java 9 introduces a convenience method List.of used as follows:

List<String> l = List.of("s1", "s2", "s3"); 

Java 8 and older

Here are a few alternatives:

// Short, but the resulting list is fixed size. List<String> list1 = Arrays.asList("s1", "s2", "s3");  // Similar to above, but the resulting list can grow. List<String> list2 = new ArrayList<>(Arrays.asList("s1", "s2", "s3"));  // Using initialization block. Useful if you need to "compute" the strings. List<String> list3 = new ArrayList<String>() {{     add("s1");     add("s2");     add("s3"); }}; 

When it comes to arrays, you could initialize it at the point of declaration like this:

String[] arr = { "s1", "s2", "s3" }; 

If you need to reinitialize it or create it without storing it in a variable, you do

new String[] { "s1", "s2", "s3" } 

If the string constants are may though, it would look like

String[] arr = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10",                  "s11", "s12", "s13" }; 

In these cases I usually prefer writing

String[] arr = "s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13".split(","); 
like image 24
aioobe Avatar answered Oct 12 '22 01:10

aioobe