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;
}
}
@arnehormann
Copy link

Your code is pretty similar to my all time favourite support function for simple array creation, so I'll just leave this here:

public static <T> T[] array(T...entries) {
    return entries;
}

@briangoetz
Copy link

With what java compiler does this actually work?

@okram
Copy link

okram commented May 12, 2014

This only works in Java8 which supports lambdas.

@jagwire
Copy link

jagwire commented Jun 24, 2014

For some reason I don't get my parameter names, I get "arg0" instead.

@janeklb
Copy link

janeklb commented Nov 5, 2014

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/

@oallouch
Copy link

oallouch commented Dec 2, 2014

Pretty, but expensive.

@yutaodou
Copy link

The trick is how to get the key from the lambda, looks good.

@MeritCampus
Copy link

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.

@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