java与lamda表达式

转载文献

https://blog.csdn.net/bitcarmanlee/article/details/70195403

本人最讨厌使用lamda表达式,没有之一。但是,无奈大家智商都太高,一个个用的贼6。所以也被迫来学习一下。
一些lambda表达式:

(int x, int y) -> x + y //接收两个参数,返回他们的和。
() -> 42 //不接收任何参数,返回42
(String s) -> { System.out.println(s); } //接收一个字符串参数,打印

如上所示,lamda表达式实质上是一个匿名函数。

替代内部匿名类

    public static void main(String[] args){
        new Thread(new Runnable() {
            public void run() {
                System.out.println("begin");
            }
        }).start();

    }

有了lambda表达式,就可以简单写为

    public static void main(String[] args){
        new Thread(()->{System.out.println("begin");}//可以进一步简化为new Thread(()->System.out.println("begin")
        ).start();

    }

我们自然可以问,如果接口中有多个需要实现的方法,还能使用lamda表达式吗?很遗憾,这时候java会报找到多个非覆盖方法。

对集合进行迭代(结合foreach)

    public static void main(String[] args){
        List<String> languages = Arrays.asList("java","scala","python");
        languages.forEach(x->System.out.println(x));
    }

map,reduce,filter

        cost.stream().map(x -> x + x*0.05).forEach(x -> System.out.println(x));
        System.out.println(cost.stream().reduce((sum,x)->sum+x).get());
        System.out.println(cost.stream().filter(x -> x > 25.0).collect(Collectors.toList()));

实现伪函数式编程。

在JAVA 8 里,函数仍然不是一个对象,不过,你可以把他转变为一个对象。这就是Predicate接口。

    public static void main(String[] args){
        List<String> languages = Arrays.asList("Java","Python","scala","Shell","R");
        System.out.println("Language starts with J: ");
        filterTest(languages,x -> x.startsWith("J"));
    }

    public static void filterTest(List<String> languages, Predicate<String> condition) {
        languages.stream().filter(x -> condition.test(x)).forEach(x -> System.out.println(x + " "));
    }

最后总结,还是不喜欢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值