First attempt :
List<String> a = new ArrayList<String>();
a.add("1");
a.add("2");
a.add("1");
a.add("2");
Pretty bad signal-to-noise ratio.
Second attempt :
List<String> a = Arrays.asList(new String[]{ "a", "b" });
Slightly more readable, but allocates a useless intermediate array.
Third attempt :
List<String> a = Arrays.asList("a", "b");
Much more readable, but doesn't work if you want a set rather than a list : there's no
Arrays.asSet()
.Here's the OptimJ version :
ArrayList<String> a = { "a", "b" };
HashSet<String> s = { "a", "b" };
HashSet<String> s = { "a", "b" };
But nausea quickly kicks in when you try to instanciate imbricated collection. A cooking recipe may be seen as a list (ordered) of sets of tasks (unordered because they can be done in parallel).
First attempt :
List<Hashset<String>> irishStew = new ArrayList<Hashset <String>>();
HashSet<String> set1 = new HashSet<String>();
set1.add("Mince the meet");
set1.add("Mash the potatoes");
irishStew.add(set1);
HashSet<String> set2 = new HashSet<String>();
set2.add("Cook in oven");
irishStew.add(set2);
HashSet<String> set1 = new HashSet<String>();
set1.add("Mince the meet");
set1.add("Mash the potatoes");
irishStew.add(set1);
HashSet<String> set2 = new HashSet<String>();
set2.add("Cook in oven");
irishStew.add(set2);
Wow! This is called write-only code. Think about having to maintain pages of similar code written by an summer intern two years ago.
Second attempt :
... ?
The
asList
doesn't work because it requires expressions, and the code that builds our sets is a sequence of statements, not an expression.Here's the OptimJ version :
ArrayList<HashSet<String>> irishStew = {
{ "Mince the meet", "Mash the potatoes" },
{ "Cook in oven"}
};
{ "Mince the meet", "Mash the potatoes" },
{ "Cook in oven"}
};
Do you feel more confident now taking this code maintenance assignment ?