8.如果 Lambda 表达式的主体包含一条以上语句,则表达式必须包含在花括号{}中(形成代码块)。匿名函数的返回类型与代码块的返回类型一致,若没有返回则为空
Map<String, String> map = new HashMap<>(); map.put("a", "a"); map.put("b", "b"); map.put("c", "c"); map.put("d", "d"); // 堆代码 duidaima.com System.out.println("map普通方式遍历:"); for (String key : map.keySet()) { System.out.println("k=" + key + ",v=" + map.get(key)); }使用Lambda进行遍历:
System.out.println("map拉姆达表达式遍历:"); map.forEach((k, v) -> { System.out.println("k=" + k + ",v=" + v); });List也同理,不过List还可以通过双冒号运算符遍历:
List<String> list = new ArrayList<String>(); list.add("a"); list.add("bb"); list.add("ccc"); list.add("dddd"); System.out.println("list拉姆达表达式遍历:"); list.forEach(v -> { System.out.println(v); }); System.out.println("list双冒号运算符遍历:"); list.forEach(System.out::println);输出结果:
k=a,v=a k=b,v=b k=c,v=c k=d,v=dmap拉姆达表达式遍历:
k=a,v=a k=b,v=b k=c,v=c k=d,v=dlist拉姆达表达式遍历:
a bb ccc ddddlist双冒号运算符遍历:
a bb ccc ddddLambda 除了在for循环遍历中使用外,它还可以代替匿名的内部类。比如下面这个例子的线程创建:
//使用普通的方式创建 Runnable r1 = new Runnable() { @Override public void run() { System.out.println("普通方式创建!"); } }; //使用拉姆达方式创建 Runnable r2 = ()-> System.out.println("拉姆达方式创建!");注: 这个例子中使用Lambda表达式的时候,编译器会自动推断:根据线程类的构造函数签名 Runnable r { },将该 Lambda 表达式赋 Runnable 接口。