目录

1.目前Java中自带的函数式编程接口

2.java中使用函数式编程的案例

3.自定义函数式接口

4.自定义函数式接口的实现


简单一句话理解函数式编程,传统的方法调用我们都是传递参数,而函数式编程,传递的则是方法实现的过程。

1.目前Java中自带的函数式编程接口

1.线程类型

接口名 返回值/方法/参数 含义
Runnable void run() 定义多线程方法内容
Callable<V> V call() 有返回值的多线程方法

2.有参/无返回值 类型

接口名 返回值/方法/参数 含义
Consumer<T> void accept(T t) 接收一个参数,不返回值
BiConsumer<T,U>

void accept(T t,U u)

接收两个参数,不返回值
ObjIntConsumer<T> void accept(T t,int value) 接收一个泛型参数和一个整形参数,不返回值
ObjDoubleConsumer<T> void accept(T t,double value) 接收一个泛型参数和一个双精度小数类型参数,不返回值
ObjLongConsumer<T> void accept(T t,Long value) 接收一个泛型参数和一个长整型的参数,不返回值

3.无参/有返回值 类型

接口名 返回值/方法/参数 含义
Supplier<T> T get() 不接受参数,返回一个泛型的参数
BooleanSupplier boolean getAsBoolean() 不接受参数,返回一个布尔参数
还有很多,不一一列举了......

4.有参/有返回值 类型

接口名 返回值/方法/参数 含义
Function<T, R> R apply(T t) 接收一个参数,返回另一种参数
Predicate<T> boolean test(T t) 接收一个参数,返回一个布尔值
这里也还有很多,就不一一列举了.....

还有很多的函数式接口,具体可以参考java.util.function包下的内容

2.java中使用函数式编程的案例

1.ArrayList中的forEach方法

使用一下这个方法看看

打印结果:

这里的意思其实就是上面所说的,我们不是像传统的方法传递的是参数,传递的是一种方法的实现。从forEach的方法中不难看出,他是将List中的每一个元素放入accept的方法中的,而我们告诉了Consumer要去打印传入的每个参数。

2.再比如ArrayList中的replaceAll这个方法

可以看到,这里的逻辑是将List中的值经过变换,在赋给原来的引用,所以我们传入的实现就是改变的规则,如下:

结果:

3.Stream流

在Java.util.stream.Stream类下,我们可以看到大部分的方法都是用函数式编程实现的。

  • Stream<T> filter(Predicate<? super T> predicate)
  • <R> Stream<R> map(Function<? super T, ? extends R> mapper)
  • IntStream mapToInt(ToIntFunction<? super T> mapper)
  • LongStream mapToLong(ToLongFunction<? super T> mapper)

简单的实现:

这里通过少量的代码直接实现了对列表中所有的数字加10,过滤大于14的值,并组成一个新的List,并打印出来,我们来看看结果:

3.自定义函数式接口

自定义函数式接口需要满足个规则:

1.类型必须是接口。

2.接口里有且仅有一个抽象方法。

3.使用@FunctionalInterface标注接口。

4.自定义函数式接口的实现

当然,java提供的函数式接口,已经基本满足日常开发的需求了,合理的利用函数式编程,可以统一团队的开发规范,提高代码可读性,简化代码。

【Java进阶】java函数式编程的使用相关推荐

  1. java8 函数式编程_您必须学习Java 8的函数式编程吗?

    java8 函数式编程 我最近一直在研究Java 8,并掌握了Manning出版的" Java 8 In Action" . 让我印象深刻的第一件事是Java 8独特的销售主张是函 ...

  2. 您必须学习Java 8的函数式编程吗?

    我最近一直在研究Java 8,并掌握了Manning出版的" Java 8 In Action" . 让我印象深刻的第一件事是Java 8的独特销售主张是函数式编程. 函数现在是一 ...

  3. 【Java】23 函数式编程

    函数式接口(Functional Interface)是 JDK 1.8 对一类特殊类型的接口的称呼. 这类接口有且仅有一个抽象方法,并且这类接口使用了 @FunctionalInterface 进行 ...

  4. JAVA进阶案例 TCP编程之网络聊天工具(服务端)

    实现分析. 1.开启服务端 客户端选择'登录以后'后,提示输入用户名和密码,验证成功则进入好友列表界面 2.用户聊天 双击好友,进入好友聊天界面.在信息框编辑信息 点击发送 当客户端向服务端发送数据时 ...

  5. java进阶之---------网络编程

    java进阶之网络编程,学这个之前我们在这里简单讨论一下什么是计算机网络: 计算机网络是将不同的地理位置但是具有独立功能的计算机及其外部设备,通过通信线路连接起来,实现资源共享 这里我们就将实现这个功 ...

  6. Java 1.8 函数式编程详解

    Java 1.8 函数式编程详解 文章目录 Java 1.8 函数式编程详解 一. 概述 1.1 java 8 新特性: 二. 函数式接口 2.1 函数式接口概述 2.2 Lambda表达式概述 2. ...

  7. Java 中的函数式编程

    1. 概述 在本教程中,我们将了解函数式编程范式的核心原则以及如何在 Java 编程语言中使用它们. 我们还将介绍一些高级函数式编程技术.这将帮助我们了解 Java 中的函数式编程的好处. 2. 什么 ...

  8. 用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式

    今天,用通俗易懂的大白话来彻底搞明白Java里的函数式编程和Lambda表达式 为什么引入函数式编程,lambda表达式? 大家都知道,JDK1.8引入了函数式编程,lambda表达式. 那有没有想过 ...

  9. predicate java 作用_Java函数式编程接口详解之Predicate

    一.初识 Predicate是Java提供的重要的函数编程接口之一,作用主要是用于逻辑判断. 首先看看源码: @FunctionalInterface public interface Predica ...

  10. 这个类库可以帮助你理解Java中的函数式编程

    每当JDK发布了新版本就有同学说"你发任你发,我用Java 8",可在工作中有不少人依然不太擅长使用Java8的新特性,而这些特性往往让Java不再"臃肿".不 ...

最新文章

  1. Android CheckBox 点击的时候没有效果
  2. 公有链和联盟链的本质不同
  3. JSTL fmt标签格式化日期时分秒显示为00:00:00和12:00:00问题
  4. 应用跳转到AppStore指定关键字搜索界面
  5. Android开发-下载网络图片并显示到本地
  6. Graphics.TranslateTransform设置旋转角度不起作用?
  7. 「镁客·请讲」Site24×7李飞:云服务是大势所趋,云监控生意又要怎么做?...
  8. 计算机组成原理期末考试题库(超级多的那种)
  9. LR预设王家卫港风胶片复古调色滤镜支持PR/PS/FCPX/达芬奇/AE/LUT
  10. 基于ssm的仿微博系统的设计与实现
  11. 评弱水三千,该取几瓢饮?———贪恋还是专情
  12. Flash实例教程:AS3代码简单表现照片底片效果
  13. SECS/GEM/GEM300/EAP 讲解(三)半导体协议
  14. 如何实现可靠UDP传输
  15. 一种基于CUDA标准的异构并行编程模型开发简介
  16. windows下连接服务器
  17. python保存文件的几种方式
  18. SLAM求职和学习经验
  19. Linux 远程桌面 速度快,虫洞TCP加速,提升远程桌面和SSH访问速度
  20. 狼人杀个人理解玩法之(守卫)

热门文章

  1. 爱之祭@楚风[2010-3-6 06:42]
  2. AirSim 如何更换无人机模型
  3. ingress使用80和443对外提供服务
  4. jQuery入门基础-附案例
  5. python airflow_airflow安装与使用
  6. C++性能优化(七)——内存池技术
  7. 手写ORM框架----(数据库单表CRUD万能框架)
  8. Django(二)精美博客搭建(1)实现登录/注册功能
  9. Uncaught SecurityError: Failed to execute ‘toDataURL‘ on ‘HTMLCanvasElement‘: Tainted canvases may
  10. activiti 7.1.0.M6 整合 springboot 2.7.4 配置类