Skip to content

Instantly share code, notes, and snippets.

@galdosd
Last active June 29, 2018 20:57
Show Gist options
  • Star 25 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save galdosd/10823529 to your computer and use it in GitHub Desktop.
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;
}
}
@henrik242
Copy link

Not bad! Here's a less evil, more compact, but slightly less pretty attempt: http://stackoverflow.com/a/39510693/13365

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment