Lambda表达式是java8的新特性,支持代码块做为方法参数,至关于Lambda表达式代替匿名内部类建立对象Lambda代码块将会代替实现抽象方法的方法体,lambda表达式就至关于一个匿名的方法。html
1.Lambda表达式的语法:(形参列表)_>{ 代码块};行参列表容许省略修饰符,若是只有一个形参,也能够省略括号;箭头,必须经过英文中的下划线和大于号组成;代码块 ,若是只有一条能够不用写花括号,只有一条return返回语句,能够省略return。html5
import java.util.Arrays; import java.util.List; public class Demo06 { public static void main(String[] args) { // TODO Auto-generated method stub String[] s = { "lll", "kkk", "mmm", "ooo", "hhh" }; List<String> s1 = Arrays.asList(s); System.out.println(s1); for (String temp : s) { System.out.println(temp); } System.out.println("######"); // lamdba表达式 s1.forEach(temp -> { System.out.println(temp); }); System.out.println("-------"); s1.forEach(System.out::println); } }
2.Lambda表达式与函数式接口,Lambda表达式的类型,也被称为“目标类型”,Lambda表达式的目标类型必须是“函数式接口”。函数式接口表明的是一个抽象方法的接口。Runable、ActionListener等都是函数接口。lambda表达式的结果是被当作对象的。java
public class Demo07 { public static void main(String[] args) { // TODO Auto-generated method stub new Thread(){ public void run() { System.out.println("内部类的实现"); }; }.start(); new Thread(() -> {System.out.println("lambda表达式");}).start(); System.out.println("$$$$$$$$$$"); Runnable a1=new Runnable() { @Override public void run() { // TODO Auto-generated method stub System.out.println("匿名内部类"); } }; Runnable a2=()->{ System.out.println("Lamdba表达式");}; a1.run(); a2.run(); } }
3.使用Lambda表达式调用Arrays类的方法,由于Arrays类有些方法须要Comparator、XxxOperator、XxxFunction等接口的实例,这些接口都是函数式接口,由于lambda能够调用Arrays的方法。android
import java.util.Arrays; public class Demo08 { public static void main(String[] args) { // TODO Auto-generated method stub String[] arr1 = new String[] { "android", "c#", "c++", "java", "html5" }; Arrays.parallelSort(arr1, (a1, a2) -> a1.length() - a2.length()); System.out.println(Arrays.toString(arr1)); int[] arr2 = new int[] { 3, 2, 6, 3, 2, 1 }; Arrays.parallelPrefix(arr2, (a1, a2) -> a1 + a2); System.out.println(Arrays.toString(arr2)); long[] arr3 = new long[5]; Arrays.parallelSetAll(arr3, a1 -> a1 * 6); System.out.println(Arrays.toString(arr3)); } }