文档章节

Java 8 lambda表达式

Java搬砖工程师
 Java搬砖工程师
发布于 2018/06/07 09:24
字数 498
阅读 27
收藏 4

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

1、在JDK8之前,Java是不支持函数式编程的

  • 函数编程,即可理解是将一个函数(也称为“行为”)作为一个参数进行传递
  • 面向对象编程是对数据的抽象(各种各样的POJO类)
  • 函数式编程则是对行为的抽象(将行为作为一个参数进行传递)

2、认识Lambda表达式

传统方法:

  • 带来许多不必要的“样板代码”
new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello World!");
    }
});

Lambda表达式一句话就够了:

new Thread(() -> System.out.println("Hello World!"));

3、举例:

  • 只要是一个接口中只包含一个方法,则可以使用Lambda表达式,这样的接口称之为“函数接口”
/**
 * 函数接口:只有一个方法的接口。作为Lambda表达式的类型
 * Created by Kevin on 2018/2/17.
 */
public interface FunctionInterface {
    void test();
}

/**
 * 函数接口测试
 * Created by Kevin on 2018/2/17.
 */
public class FunctionInterfaceTest {

    @Test
    public void testLambda() {
        func(new FunctionInterface() {
            @Override
            public void test() {
                System.out.println("Hello World!");
            }
        });
        //使用Lambda表达式代替上面的匿名内部类
        func(() -> System.out.println("Hello World"));
    }

    private void func(FunctionInterface functionInterface) {
        functionInterface.test();
    }
}

4、包含参数

  • 参数类型可以不指明(建议任何情况下都指明)
/**
 * 函数接口测试
 * Created by Kevin on 2018/2/17.
 */
public class FunctionInterfaceTest {

    @Test
    public void testLambda() {
        //使用Lambda表达式代替匿名内部类
        func((x) -> System.out.println("Hello World" + x));
    }

    private void func(FunctionInterface functionInterface) {
        int x = 1;
        functionInterface.test(x);
    }
}

5、函数接口是一个泛型,不能推导出参数类型

/**
 * 函数接口:只有一个方法的接口。作为Lambda表达式的类型
 * Created by Kevin on 2018/2/17.
 */
public interface FunctionInterface<T> {
    void test(T param);
}

6、带参数带返回值

func((Integer x) -> {
    System.out.println("Hello World" + x);
    return true;
});

7、Lambda 表达式,更大的好处则是集合API的更新,新增的Stream类库

  • 遍历使用集合时不再像以往那样不断地使用for循环

之前代码:

for (Student student : studentList) {
    if (student.getCity().equals("chengdu")) {
        count++;
    }
}

JDK8使用集合的正确姿势:

count = studentList.stream().filter((student -> student.getCity().equals("chengdu"))).count();

© 著作权归作者所有

Java搬砖工程师
粉丝 37
博文 654
码字总数 344294
作品 0
南京
程序员
私信 提问
Lambda 表达式有何用处?如何使用?(针对Java8)

什么是Lambda? 我们知道,对于一个Java变量,我们可以赋给其一个“值”。 如果你想把“一块代码”赋给一个Java变量,应该怎么做呢? 比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的J...

亭子happy
2018/06/06
343
2
Java8 Lambda【简】

Java8 Lambda Lambda是一个表达式,也可以说它是一个匿名函数。然而在使用它或是阅读Lambda代码的时候,却显得并不那么容易。因为它匿名,因为它删减了一些必要的说明信息(比如方法名)。 ...

anlve
2018/03/08
68
0
JVM之动态方法调用:invokedynamic

在本文的前面的姊妹篇中,介绍了Java方法调用的5种操作码中的4种。它们是Java 8和Java 9中方法调用的标准字节码形式。 于是第五个操作码invokedynamic便进入了我们的视线。简单来说,Java 7中...

01/19
0
0
02、Java的lambda表达式和JavaScript的箭头函数

[toc] 前言 在JDK8和ES6的语言发展中,在Java的lambda表达式和JavaScript的箭头函数这两者有着千丝万缕的联系;本次试图通过这篇文章弄懂上面的两个“语法糖”。 简介 Lambda 表达式来源于 ...

weir_will
2018/06/14
0
0
了解一下Java 8 (一)

2015年公司发展迅速,于是大量的时间花费在招聘上。招聘工程师,必然需要了解候选人的技术能力,尤其是对自己使用的技术的了解程度。优秀的工程师都需要知其然,也知其所以然,否则遇到技术难...

TalkingData
2016/01/20
1K
8

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 我的视频网站vip账号和我厚脸皮的朋友们

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @Cobbage :分享小海的单曲《衡山路(2016现场版)》: 《衡山路(2016现场版)》- 小海 手机党少年们想听歌,请使劲儿戳(这里) @FalconChe...

小小编辑
35分钟前
4
0
Spring Cloud Alibaba 实战(十二) - Nacos配置管理

> 本章主要内容是:使用Nacos管理配置以及实现配置管理的原因,配置如何管理以及动态刷新和最佳实现总结,最后是Nacos配置刷新原理解读 该技术类似于Spring Cloud Config 1 配置管理的意义 项目...

JavaEdge
今天
8
0
面试官问你编码相关的面试题,把这篇甩给他就完事!

前情回顾:Java中一个字符占两字节 但为什么new String("字").getBytes().length 返回3个字节 今天主要聊一聊: 字节 字符 字符集 编码 字符编码 Java 内码和外码 Unicode 字节 例如 :00001...

gzc426
今天
9
0
写的简单sh脚本2

#!/bin/bashexport LANG="en_US.UTF-8"#chmod +x filename 记得给文件加可执行权限#./vsimstart.sh#启动vsim项目echo "start vism"#207------------------------------assets=vsim-a......

hexiaoming123
昨天
6
0
java基础(1)变量和常量

概要和总结: 数据类型图: 基本数据类型:只有基本功能-----保存数据 (4类8种)byte-short-int-long-float-double-char-boolean 引用数据类型:有更多功能,保存数据,处理数据...

煌sir
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部