Reputation: 187529
I'm looking for a compact syntax for instantiating a collection and adding a few items to it. I currently use this syntax:
Collection<String> collection =
new ArrayList<String>(Arrays.asList(new String[] { "1", "2", "3" }));
I seem to recall that there's a more compact way of doing this that uses an anonymous subclass of ArrayList
, then adds the items in the subclass' constructor. However, I can't seem to remember the exact syntax.
Upvotes: 33
Views: 99033
Reputation: 12668
From JDK9 you can use factory methods:
List<String> list = List.of("foo", "bar", "baz");
Set<String> set = Set.of("foo", "bar", "baz");
Upvotes: 6
Reputation: 7230
You could create an utility function:
@SafeVarargs
public static <T> List<T> listOf(T ... values) {
return new ArrayList<T>(Arrays.asList(values));
}
So you could call it like:
collection = MyUtils.listOf("1", "2", "3");
That way, you can populate a list very easily, and still keep it mutable.
Upvotes: 3
Reputation: 6532
Maybe it's just me but I dont see the point of complicating things, purely in pursuit of writing shorter/faster code. Given the choice of typing marginally fewer lines of code and far easier debugging/revising I am pretty sure I'd choose the second option.
So unless there is a particular reason to push for keeping this short, I'd say stick to Ockham's razor, and given a number of solutions to a problem, go with the simplest one. That way when something does go wrong (which Murphy's law clearly dictates it will) you'll have a much easier time to track it. :)
Upvotes: 0
Reputation: 24788
http://blog.firdau.si/2010/07/01/java-tips-initializing-collection/
List<String> s = Arrays.asList("1", "2");
Upvotes: 48
Reputation: 22292
I guess you're thinking about
collection = new ArrayList<String>() { // anonymous subclass
{ // anonymous initializer
add("1");
add("2");
add("3");
}
}
which, one comapcted, gives
collection = new ArrayList<String>() {{ add("1"); add("2"); add("3"); }}
FUGLY, to say the least. However, there is a variant to the Arrays.asList method : Arrays.asList(T...a)
which provides comapcity and readability. As an example, it gives the following line of code :
collection = new ArrayList<String>(Arrays.asList("1", "2", "3")); // yep, this one is the shorter
And notice you don't create an anonymous subclass of ArrayList of dubious use.
Upvotes: 14
Reputation: 20875
Maybe that was
Collection<String> collection = new ArrayList<String>() {{
add("foo");
add("bar");
}};
Also known as double-bracket initialization.
Upvotes: 5