首先,Lambda表达式只适合函数式接口!
什么是函数式接口?
函数式接口是指内部只有一个抽象方法的接口。如果一个接口内部有多个方法,那就不能使用Lambda表达式!
// 自定义函数接口
public interface ConsumerInterface<T>{
void accept(T t);
}
Lambda具体使用
无参
// JDK7 匿名内部类写法
new Thread(new Runnable(){// 接口名
@Override
public void run(){// 方法名
System.out.println("Thread run()");
}
}).start();
// 使用Lambda表达式java
new Thread(() -> { //如果只有一条语句,这对大括号可以省略
System.out.println("aaa");
});
// 只有一条语句,省略大括号
new Thread(() -> System.out.println("aaa"));
有参
// JDK7 匿名内部类写法
List<String> list = Arrays.asList("I", "love", "you", "too");
Collections.sort(list, new Comparator<String>(){// 接口名
@Override
public int compare(String s1, String s2){// 方法名
if(s1 == null)
return -1;
if(s2 == null)
return 1;
return s1.length()-s2.length();
}
});
// JDK8 Lambda表达式写法
List<String> list = Arrays.asList("I", "love", "you", "too");
Collections.sort(list, (s1, s2) ->{// 省略参数表的类型
if(s1 == null)
return -1;
if(s2 == null)
return 1;
return s1.length()-s2.length();
});