JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式

这些天看见另一本好书《给大忙人看的Java SE 8》,其中的新特性 StreamAPI 和 lambda表达式 是之前jdk没有提供的新特性,也是jdk8 重要的更新内容,我会总结一下它们的用法,更详细的参见书本。

  1. lambda表达式的概念
    人对一个概念的理解是随着时间渐渐加深的,之前也见过lambda表达式,但那时候学起来完全摸不到头脑,这两天重新去看,终于有了一些概念,可以想象,过段时间会更加知道为什么会有lambda表达式,大牛们为什么会去设计这种函数式语言?

java里大家都知道匿名函数,下面是一个多线程的创建例子:

package JDK;

/**
 * Created by panqian on 2017/2/20.
 */
public class Lambda_1 {

    public static void main(String[] args) {

        //传统创建线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("传统创建线程");
            }
        }).start();

        //使用lambda表达式
        new Thread(()->{
            System.out.println("lambda表达式");
        }).start();
    }
}

同样是传入Runnable实现类,lambda表达式的写法比传统的更加简洁。再看一个集合排序


        List<Integer> list = new ArrayList<>();
        list.add(3);
        list.add(1);
        list.add(2);

        System.out.println("排序前: " + list.toString());

        Collections.sort(list, (Integer x, Integer y) -> {
            return x > y ? 1 : -1;
        });


        System.out.println("排序后: " + list.toString());

可以看出 lambda表达式由 参数((Integer x, Integer y)),剪头(->),代码块({
return x > y ? 1 : -1; })组成。 lambda表达式很大的一个使用场景就是替代java的内部类,做到代码简洁,易读。

2.方法引用
对于上面的代码还不是最简洁的,如果在lambda表达式中引用别的方法,可以拿lambda表达式里面的方法引用:

拿前面集合排序的例子继续简化:

List<Integer> list1 = new ArrayList<>();
list1.add(3);
list1.add(1);
list1.add(2);

System.out.println("排序前: " + list1.toString());

//::前面是类,后面是方法,压缩到只有一句,等同于 
//
//  (Integer x, Integer y) -> {
//      return Integer.compare(x,y);
//  }
list1.sort(Integer::compare);

System.out.println("排序前: " + list1.toString());

可以看出它由

对象::实例方法
类::静态方法

格式组成

Integer::compare这个表达式没有参数,它会根据上下文自动判断应该传入什么参数,达到排序的目的。

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值