I\'m looking for a compact syntax for instantiating a collection and adding a few items to it. I currently use this syntax:
Collection collecti
Maybe that was
Collection<String> collection = new ArrayList<String>() {{
add("foo");
add("bar");
}};
Also known as double-bracket initialization.
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. :)
http://blog.firdau.si/2010/07/01/java-tips-initializing-collection/
List<String> s = Arrays.asList("1", "2");
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.
See Initialization of an ArrayList in one line
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.