Lambda表达式是JDK1.8引入的,所谓的Lambda是指在应用在单一抽象方法接口环境下的一种简化定义形式,可以解决匿名内部类的定义复杂问题。
//定义一个输出打印的接口
public interface Imessage {
public void print();
}
//在定义一个demo类,如果我这个类要实现该方法是不是要去实现这个接口,并且覆写这个方法,但是我这个类又不想成为它的子类,这怎么办?可以在类里面写一个打印的方法,这个方法也就是覆写该接口的方法
public class demo{
public static funPrint(Imessage imessage ){
imessage .print();
}
public static void main(String[] args){
//常规方法一
funPrint(
new Imessage(){
@override
public void print(){
//你要做的打印操作
}
}
);
//lamada表达式 相当于自己会创造一个匿名内部类去覆写该方法,你只需要将方法补上即可
funPrint(()->你要做的打印操作);
}
//很显然lamada表达式要简明很多,语法规则() -> 操作/{操作1;操作2},
备注:当存在执行多行代码时,使用{}声明
}
下面讲一下lamada表达式常用的一些操作:
1 遍历:
public class demo{
public static void main(String[] args){
List<String> list = Arrays.asList("1","2","3");
//直接打印
list.forEach(System.out::println);
//取值分别打印
list.forEach(s -> {
System.out.println(s);
});
}
}
2 利用函数式接口实现匿名内部类:
public class demo{
public static void main(String[] args){
new Thread(() -> System.out.println("run方法需要实现的操作")).start();
//这是我们在开发中最常用的一种模式,某各类定义了一个方法,然后多个线程去调用它
IntStream.range(0,10).mapToObj(i -> new Thread(某个类::类中方法)).forEach(Thread::start)
//可以看做是调用了匿名内部类,等价于 JDK1.7
for(int i=0,i<10,i++){
Thread th = new Thread(new Runable(){
@override
public void run(){
某各类.类中方法
}
})
th.start();
}
}
}
3 map,允许将对象进行转换, 比如, 可以更改list中的每个元素的值
public class demo{
public static void main(String[] args){
List<Integer> list = Arrays.asList(1,2,3);
//不改变原有元素
list.forEach(i -> i = i*2);
ist.forEach(System.out::println);
//改变对象
list.stream().map((i) -> i * 3).forEach(System.out::println);
}
}