Lambda函数式编程

简介: Java8所有的新特性基本基于函数式编程的思想,函数式编程给Java带来了注入了新鲜的活力。函数式编程其实并不是很难,小编在学习函数式编程时候刚开始一头雾水,最后仔细观察就发现了其中的小窍门,读了本篇文章如果还没有掌握,就算我输了
Java8所有的新特性基本基于函数式编程的思想,函数式编程给Java带来了注入了新鲜的活力。
函数式编程其实并不是很难,小编在学习函数式编程时候刚开始一头雾水,最后仔细观察就发现了其中的小窍门,读了本篇文章如果还没有掌握,就算我输了

函数式编程

一、Lambda表达式

注意: 以下方法都可以使用表达式来进行缩写

我们来看Java中如何来定义一个方法

1. 语法

()->{}

其中小括号里面可以放入参,大括号就是方法体,里面也允许有返回值。

当方法体中只有返回值而没有其他语句时候,大括号和 return 关键字都可以省略不写。

2. 方法引用

只要用.引用不报错的,都可以将.换成:

类型 语法
1、引用静态方法 ClassName::staticMethodName
2、引用构造函数 ClassName::new
3、引用特定类型的实例方法 ClassName::instanceMethodName
4、引用特定对象的实例方法 objectName::instanceMethodName

二、Java8新增函数式接口

1. Predicate接口

Predicate 接口只有一个参数,返回boolean类型。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)

Predicate<String> predicate = (s) -> s.length() > 0;

根据前面的语法我们知道小括号里面可以放入参,大括号里面放出参,当大括号里面只有返回值时候,大括号和 return 关键字也可以省略。如上。

2. Function 接口

Function 接口有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法(compose, andThen):

Function<Integer, Integer> function = (x) -> 2 * x;

同理,这个接口有一个入参和出参,如果返回体重不包含其他逻辑,只有一个返回值,大括号和 return 关键字也可以省略。如上。

3. Supplier 接口

Supplier 接口返回一个任意范型的值,和Function接口不同的是该接口没有任何参数

public class Main{
    public static void main(String[] args) {
        //构造方法
        Supplier<Main> supplier = () -> new Main();
        Supplier<Main> mainSupplier = Main::new;
        Supplier<Main> mainSupplier1 = Main::staticMethod;
    }
    private static Main staticMethod() {
        return new Main();
    }
}

因为没有入参,所以小括号里面什么都不用写。当遇到这种情况,同样可以用上面其他两种来替换

4. Consumer 接口

Consumer 是一个只有入参,但是无出参的接口。

public class Main {
    public static void main(String[] args) {
        List<String> dataList = Arrays.asList("1", "2");

        //特定类的静态方法
        dataList.forEach(Main::staticMethod);
        dataList.forEach((x) -> System.out.println(x));
        dataList.forEach(System.out::println);

    }
    private static void staticMethod(String name) {
        System.out.println("对象静态方法引用:" + name);
    }
}

三、快速记忆

虽然新增的函数式接口并不多,但是想要一次性死记住,还是有一点点的难度。小编的学习方式是
理解这记忆。

类型 简记
1、Predicate 条件类型
2、Supplier 无入参,有出参
3、Function 有入参,有出参
4、Consumer 有入参,无出参
相关文章
|
算法 Swift 开发者
【Swift开发专栏】Swift开发者的进阶之路:从新手到专家
【4月更文挑战第30天】本文介绍了Swift开发者从基础到专家的成长路径,包括掌握语言基础如语法、数据结构、错误处理和内存管理;深入学习Apple框架如UIKit、Core Data和CloudKit;关注性能优化、架构设计及网络与安全编程;以及持续学习新技术,参与开源项目,建立专业网络。通过不断学习和实践,开发者可逐步成为Swift专家。
632 0
|
存储 搜索推荐 Java
极简教程 | Spring Boot整合Elasticsearch实现数据搜索引擎
前面介绍了Elasticsearch的特点和优势,接下来在Spring Boot项目中使用Elasticsearch一步一步地实现搜索引擎的功能。
极简教程 | Spring Boot整合Elasticsearch实现数据搜索引擎
|
机器学习/深度学习 Python Windows
基于Python之邻接矩阵沿对角线拼接操作简单方法
基于Python之邻接矩阵沿对角线拼接操作简单方法
783 0
基于Python之邻接矩阵沿对角线拼接操作简单方法
|
弹性计算 关系型数据库 测试技术
PostgreSQL 11 1万亿 tpcb 性能测试 on 阿里云ECS + ESSD + zfs/lvm2条带 + block_size=32K
标签 PostgreSQL , pgbench , tpcb , tpcc , tpch , lvm2 , zfs , 条带 背景 最近的几个PostgreSQL OLTP与OLAP的测试: 《PostgreSQL 11 tpcc 测试(103万tpmC on ECS) - use sysbe...
4197 0
|
存储 分布式计算 Hadoop
MapReduce计算框架
MapReduce计算框架 一、MapReduce实现原理   图展示了MapReduce实现中的全部流程,处理步骤如下:   1、用户程序中的MapReduce函数库首先把输入文件分成M块(每块大小默认64M),在集群上执行处理程序,见序号1   2、主控程序master分配Map任务和Reduce任务给工作执行机器worker。
2464 0
酷派7019获得root教程 亲测
亲测,亲,这个办法百分百可行,简单有步骤,包教包会!!!!   下载工具包,   首先,把手机连到电脑上,开启USB调试。不要打开USB存储。然后,xp系统的进我的电脑    win7系统的进计算机  都能看到一个wo标识的磁盘右键点一下,点打开,进到里面的driver ,双击driverinstall.exe文件(这是安装驱动,能连上豌豆荚就是已正确安装。
1229 0
|
监控 MySQL 关系型数据库
cacti + nagios + ndoutility + nagvis安装及配置
系统CentOS 5 final默认安装apache 、php关闭iptables iptables - F chkconfig –level 23456 iptables off 修改/etc/selinux.
1347 0
|
13天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
7960 15
|
11天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1761 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!