JDK8新特性之Lambda表达式

什么是Lambda表达式

Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。

Lambda语法

一行执行语句的写法:

(parameters) -> expression

如果有多行执行语句,可以加上 {}

(parameters) -> { statements; }

如:

public int add(int x, int y) {
    return x + y;
}

转换成Lambda表达式有以下几种写法:

// 指定参数类型及return
(int x, int y) -> { return x + y; }

// 指定参数类型,不指定return
(int x, int y) -> x + y;

// 不指定参数类型和return,编译器会自动推断
(x, y) -> x + y;

Lambda用途

1、只有一个抽象方法的函数式接口

Lambda表达式的目标类型是函数式接口,什么是函数式接口之后会讲。

下面拿创建线程来举例,用lambda表达式可以有以下几种写法。

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

    Runnable runnable = () -> System.out.println("t2");
    new Thread(runnable).start();

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

    new Thread(() -> run("t4")).start();

    new Thread(() -> {
        String str = "t5";
        System.out.println(str);
    }).start();

}

private static void run(String str) {
    System.out.println(str);
}

最后输出:

t1
t2
t3
t4
t5

2、集合批量操作

下面打印list集合的两种写法是等价的。

List<String> list = Arrays.asList("a","b","c");
for(String str : list){
    System.out.println(str);
}

list.forEach((e) -> System.out.println(e));

3、流操作

下面是流查询list集合中等于 "a"的数量。

list.stream().filter((e) -> "a".equals(e)).count();

更多的Lambda表达式及关于流更多内容之后陆续会讲到。

原文发布于微信公众号 - Java技术栈(javastack)

原文发表时间:2017-10-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Alice

swift基础_ set get方法 理解

swift中重写set get方法是这样的。 先定义一个变量,当调用set方法的时候,系统会有一个newValue, 将newValue赋值给我们定义的变量,然...

261100
来自专栏向治洪

Kotlin基础之内联函数

内联函数 使用高阶函数会给运行时带来一些坏处:每个函数都是一个对象,捕获闭包(如:访问函数体内的变量),内存分配(函数对象或Class),虚拟调用引入的运行过载...

22450
来自专栏蘑菇先生的技术笔记

c#语言-高阶函数

34560
来自专栏编程坑太多

Java 8 新特性 Lambda 表达式简单使用

18990
来自专栏Esofar 开发日记

C#基础篇 - 理解委托和事件

委托类似于C++中的函数指针(一个指向内存位置的指针)。委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针。简单理解,委托是一种可以把函数当做...

14230
来自专栏Jackson0714

不惧面试:委托

365130
来自专栏WindCoder

Java中的域与变量

Java中的Field译为“字段”,也译为“域”,Field和成员变量(Member Variable)是相同的。所以域是变量中的一种。

63610
来自专栏大前端_Web

C#中值类型和引用类型及类型的转换

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

50860
来自专栏林德熙的博客

C# 传入 params object 长度

刚刚 LiesAuer 大神问了一个问题,如果在 params object 传入 object 数组,那么拿到的值是的长度是多少 我做了测试在传入不同的值可能...

17420
来自专栏技术博客

C#委托四(匿名方法)

什么是匿名方法? 匿名方法是C#2.0引入的一个新特性,它允许开发者声明自己的函数代码而无须使用委托函数。 C#为委托提供一种机制,可以为委托定义匿名方...

13420

扫码关注云+社区

领取腾讯云代金券