-
-
Save galdosd/10823529 to your computer and use it in GitHub Desktop.
public class EZMap<T> { | |
public static void main(String[] args) { | |
Map<String,Object> m = hashMap( | |
bob -> 5, | |
TheGimp -> 8, | |
incredibleKoolAid -> "James Taylor", | |
heyArnold -> new Date() | |
); | |
System.out.println(m); | |
} | |
private final Map<String,T> map; | |
private EZMap(Map<String,T> _map, Function<Object,T>[] entries) { | |
map=_map; | |
for( Function<Object,T> entry: entries ) { | |
final Method m; | |
try { | |
m = entry.getClass().getDeclaredMethod("apply", Object.class); | |
} catch (NoSuchMethodException nsme ) { throw new RuntimeException(nsme); } | |
final Parameter p = m.getParameters()[0]; | |
final String key = p.getName(); | |
final T value = entry.apply(null); | |
map.put(key,value); | |
} | |
} | |
public static <R> Map<String,R> hashMap(Function<Object, R>... entries) { | |
return new EZMap<R>(new HashMap<>(), entries).map; | |
} | |
public static <R> Map<String,R> treeMap(Function<Object, R>... entries) { | |
return new EZMap<R>(new TreeMap<>(), entries).map; | |
} | |
} |
With what java compiler does this actually work?
This only works in Java8 which supports lambdas.
For some reason I don't get my parameter names, I get "arg0" instead.
Great idea - but I'm having the same arg0
problem as @jagwire - see discussion on reddit: http://www.reddit.com/r/java/comments/2360is/pretty_map_literals_for_java_8/
Pretty, but expensive.
The trick is how to get the key from the lambda, looks good.
You can clear many of your doubts regarding boolean Literals in Java through Merit Campus, visit: http://java.meritcampus.com/core-java-topics/data-types-in-java, http://java.meritcampus.com/core-java-topics/literals-in-java
Not only data types, we also have each and every topic in Core Java with example for each. You can read lot of sessions and can write many practice tests in Merit Campus Java website. visit: http://java.meritcampus.com/core-java-topics/ to know more.
Not bad! Here's a less evil, more compact, but slightly less pretty attempt: http://stackoverflow.com/a/39510693/13365
Your code is pretty similar to my all time favourite support function for simple array creation, so I'll just leave this here: