Java8 Lambda表达式基础

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);
    }

}

猜你喜欢

转载自blog.csdn.net/qq_40826106/article/details/85337819