How to initialize HashSet values by construction?
Solution 1:
There is a shorthand that I use that is not very time efficient, but fits on a single line:
Set<String> h = new HashSet<>(Arrays.asList("a", "b"));
Again, this is not time efficient since you are constructing an array, converting to a list and using that list to create a set.
When initializing static final sets I usually write it like this:
public static final String[] SET_VALUES = new String[] { "a", "b" };
public static final Set<String> MY_SET = new HashSet<>(Arrays.asList(SET_VALUES));
Slightly less ugly and efficiency does not matter for the static initialization.
Solution 2:
Collection literals were scheduled for Java 7, but didn't make it in. So nothing automatic yet.
You can use guava's Sets
:
Sets.newHashSet("a", "b", "c")
Or you can use the following syntax, which will create an anonymous class, but it's hacky:
Set<String> h = new HashSet<String>() {{
add("a");
add("b");
}};