十分钟学会Java8:lambda表达式和Stream API

 Java8 的新特性:Lambda表达式、强大的 Stream API、全新时间日期 API、ConcurrentHashMap、MetaSpace。总得来说,Java8 的新特性使 Java 的运行速度更快、代码更少、便于并行、最大化减少空指针异常。

本篇博客将以笔者的一些心得帮助大家快速理解lambda表达式和Stream API.

一:lambda

1.引言

在IDE中,你是否遇到在写以下列代码时,被友情提示的情况:

        new Thread(new Runnable() {             @Override             public void run() {                 System.out.println("thread");             }         });

这时候,我们按一下快捷键,IDE自动帮我们把代码优化为酱个样子:

    new Thread(() -> System.out.println("thread"));

这就是Java8的新特性:lambda表达式

2.lambda表达式

借用引言中的示例,在调用new Thread的含参构造方法时,我们通过匿名内部类的方式实现了Runnable对象,但其实有用的代码只有System.out.println("thread");这一句,而我们却要为了这一句去写这么多行代码。正是这个问题,才有了Java8中的lambda表达式。那lambd表达式究竟是如何简化代码的呢?

先来看lambda表达式的语法:

() -> {}

() : 括号就是接口方法的括号,接口方法如果有参数,也需要写参数。只有一个参数时,括号可以省略。

-> : 分割左右部分的,没啥好讲的。

{} : 要实现的方法体。只有一行代码时,可以不加括号,可以不写return。

看了上面的解释,也就不难理解IDE优化后的代码了。不过看到这里你也许意识到,如果接口中有多个方法时,按照上面的逻辑lambda表达式恐怕不行了。没错,lambda表达式只适用于函数型接口。说白了,函数型接口就是只有一个抽象方法的接口。这种类型的接口还有一个对应的注解:@FunctionalInterface

为了让我们在需要这种接口时不再自己去创建,Java8中内置了四大核心函数型接口:

消费型接口(有参无返回值)

Consumer<T>  void accept(T t);

供给型接口(无参有返回值)

Supplier<T>  T get();

函数型接口(有参有返回值)

Function<T, R>  R apply(T t);

断言型接口(有参有布尔返回值)

Predicate<T>  boolean test(T t);

看到这里如果遇到一般的lambda表达式,你应该可以从容面对了,但高级点的恐怕看到还是懵,不要急,其实也不难。

方法引用

lambda表达式还有两种简化代码的手段,它们是方法引用构造引用

方法引用是什么呢?如果我们要实现接口的方法与另一个方法A类似,(这里的类似是指参数类型与返回值部分相同),我们直接声明A方法即可。也就是,不再使用lambda表达式的标准形式,改用高级形式。无论是标准形式还是高级形式,都是lambda表达式的一种表现形式。

举例:


                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信