只是举个例子:
public class LambdaDemo { public static String findData( String name , LambdaInterface finder){ return finder.getValue( name) ; } }
public interface LambdaInterface { public String getValue(String key) ; }
public class LambdaInterfaceTest { @Test public void test(){ Map<String,String> map = new HashMap() ; map.put("a", "11") ; map.put("b", "22") ; String name = "a" ; System.out.println(LambdaDemo.findData(name, map::get) ) ; } }
LambdaDemo.findData(name, map::get)这句代码其实完整形式是:
@Test public void test1(){ Map<String,String> map = new HashMap() ; map.put("a", "11") ; map.put("b", "22") ; String name = "a" ; System.out.println(LambdaDemo.findData(name,new LambdaInterface(){ @Override public String getValue(String key) { return map.get(key); } }) ) ; }
由于 LambdaInterface 接口只有一个方法,且这个接口方法只有一个参数,且接口方法的实现只有一句代码,且这句代码只接收一个接口方法传入的参数,此时就符合Lambda表达式的精简要求了,所以
LambdaDemo.findData(name,new LambdaInterface(){ @Override public String getValue(String key) { return map.get(key); } }) ;
就可以简化成了
LambdaDemo.findData(name, map::get) 这一句了