I just learned about “method reference” notation in Java 8 thanks to Intellij IDEA code hints.
Consider the following code:
public class MapMap { Map<String, String> map; public static void map(Object key, Object value) { System.out.println(key + ":" + value); } public void mapmap() { //...see implementations below } }
I knew this:
/* loop */ for (Map.Entry entry: map.entrySet()) { map(entry.getKey(), entry.getValue()); }
could be replaced with this:
/* lambda expression */ map.forEach((key, value) -> map(key, value);
but I did not know about this:
/* method reference */ map.forEach(MapMap::map);
See the full gist here
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Map; | |
public class MapMap | |
{ | |
Map<String, String> map; | |
public static void map(Object key, Object value) | |
{ | |
System.out.println(key + ":" + value); | |
} | |
public void mapmap() | |
{ | |
/* loop */ | |
for (Map.Entry entry: map.entrySet()) | |
{ | |
map(entry.getKey(), entry.getValue()); | |
} | |
/* lambda expression */ | |
map.forEach((key,value) -> { | |
map(key, value); | |
}); | |
/* simplified lambda */ | |
map.forEach((key,value) -> map(key, value)); | |
/* method reference */ | |
map.forEach(MapMap::map); | |
} | |
} |
See here for the official documentation on method references:
https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html