Lambda表达式和Stream流式计算

① Lambda表达式作用:
Lambda表达式属于Jdk8的新特性,可以帮助我们实现接口。
传统的接口实现方式有使用匿名内部类,如创建线程时需要实现Runnable接口,会采用如下方法:
new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello,world");
            }
        },"A").start();
但是在创建多个线程时,这种方法往往需要复写多次,使得代码量很大,而使用Lambda表达式可以很好
的简化代码。
② 如何创建Lambda表达式:
Lambda表达式口诀:拷贝小括号,写死右箭头,落地大括号。 
即 (  )  -> {      }; 小括号为函数的参数,大括号内为函数的工作。
如上面的实现Runnable接口可以使用Lambda表达式简化:
new Thread(() -> { System.out.println("hello,world");},"A").start();
③Lambda表达式对接口的要求(函数式接口):
Lambda表达式一般用于实现函数式接口,而函数式接口均带有注解@FunctionalInterface(默认
情况下隐藏),而所谓的函数式接口就是在此接口中只有一个抽象的方法。
注意:
1.Java8的另一新特性就是允许在接口中使用default实现方法,但deafult函数不会影响Lambda的上
述原则,即函数式接口中允许有多个default。
2.接口中的静态方法,即public static XXX 也不会影响Lambda原则。

如Java中自带的4大函数式接口,均可用Lambda表达式对方法进行重写:

接口名参数类型返回类型用途
Consumer< T > 消费型接口Tvoid需要传参,但无返回值,重写accept()方法
Supplier< T > 供给型接口T无需传参,但有返回值,重写get()方法
Function< T , R > 函数型接口TR传入参数T,返回参数R,重写apply()方法
Predicate< T > 断定(布尔)型接口Tboolean传入参数T,返回boolean型数据,重写test()方法
④System.out::println 是怎么回事?
其实System.out::println也是Lambda表达式的一种形式,Lambda表达式允许使用4种方式的双冒号。
种类使用方法对应的Lambda表达式
引用特定对象的实例方法Object::instanceMethod(a,b,…) ->特定对象.实例方法(a,b,…)
引用类方法Class::staticMehtod(a,b,…) ->类名.类方法(a,b,…)
引用某类对象的实例方法Class::instanceMethod(a,b,…) ->a.实例方法(a,b,…)
引用构造器Class::new(a,b,…) ->new 类名(a,b,…)
System.out::println就是使用了第一种方法,即引用特定对象的实例方法,这是由于System.out是java
.io.PrintStream的实例化对象。

这就是为什么有 list.forEach(system.out::println)这样的写法出现了,查看forEach的源码,可以发
现参数为Consumer的消费型接口,即传入参数T,不需要传出参数,只需要通过Lambda表达式重写accept()
即forEach((t) -> {System.out.println(t);})
default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
⑤Stream流式计算
现代java越来越流行链式编程(注解 @Accessors(chain = true ))+流式计算的形式。

1、什么是Stream(流)?

Stream(流)是数据渠道,用于操作数据源(集合,数组等)所生成的元素序列。(集合讲的是数据,流讲的
是计算)

2、Stream(流)的作用:

Stream能够实现类似Sql语句一样的对大批量数据进行筛选,聚合等操作与Lambda表达式共用可以大大提高
编程效率。(如大数据中的数据清洗)

3、流的计算

1.创建一个Stream:一个数据源(数组,集合)
2.中间操作:一个中间操作,处理数据源数据
3.终止操作:一个终止操作,执行中间操作链产生结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值