lambda表达式理解应用

public class Test {
    public static void main(String[] args) {
//        无参无返回值
        /*useEatable(new Eatable() {
            @Override
            public void eat() {
                System.out.println("吃冰激凌");
            }
        });*/
//        useEatable(()-> System.out.println("吃冰激凌"));
//        有参无返回值
        /*useEatable2(new Eatable2() {
            @Override
            public void eat(String something) {
                System.out.println("吃" + something);
            }
        });*/

        /*useEatable2((a)->{
            System.out.println("吃"+a);
        });*/

        //有参有返回值
        /*String s = useEatable3(new Eatable3() {
            @Override
            public String eat(String something) {
                System.out.println("吃" + something);
                return "好吃";
            }
        });
        System.out.println(s);*/

        /*String s = useEatable3((a) -> {
            System.out.println("吃" + a);
            return "好吃";
        });*/
        String s = useEatable3(a -> {return a+"ads";});
        System.out.println(s);

    }
    interface Eatable {
        void eat();
        default void drink(){
            System.out.println("喝果汁");
        };
    }
    private static void useEatable(Eatable e) {
        e.eat();
    }
    interface Eatable2 {
        void eat(String something);
    }
    private static void useEatable2(Eatable2 e) {
        e.eat("冰激凌");
    }
    interface Eatable3 {
        String eat(String something);
    }
    private static String useEatable3(Eatable3 e) {
        return e.eat("冰激凌");
    }
}

Eatable,Eatable2,Eatable3是接口,我在这定义成了内部类,也可以放在外面

总结一下,lambda表达式使用条件

1,方法(包括构造方法)的参数是接口

2,接口内只有一个未被实现的方法(default修饰的方法有默认实现)

lambda表达式使用场景

创建线程的时候

        new Thread(new Runnable() {
            @Override
            public void run() {
            }
        }).start();

        //可以写成如下代码
        new Thread(()->{

        }).start();

遍历集合的时候

List<String> players =  new ArrayList<>();
//虽然是空的,但是我们假装里面有东西
players.forEach((a)->{
    System.out.println(a);
});
//可以简写成如下格式(但是我觉得这玩意没用,正式开发中我们还是得操作数据)
players.forEach(System.out::println);

数组排序

 String[] atp = {"Rafael Nadal", "Novak Djokovic",
                "Stanislas Wawrinka",
                "David Ferrer","Roger Federer",
                "Andy Murray","Tomas Berdych",
                "Juan Martin Del Potro"};

Arrays.sort(atp,(String a,String b) -> (a.compareTo(b)));

其他的之后再研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值