返回顶部
首页 > 资讯 > 后端开发 > JAVA >【Java系列】函数式接口编程
  • 731
分享到

【Java系列】函数式接口编程

java开发语言 2023-12-23 07:12:31 731人浏览 薄情痞子
摘要

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

一.基本介绍

1.什么是函数式接口?

在 Java 中,函数接口通常指的是函数式接口(Functional Interface)。函数式接口是 Java 8 引入的一个特性,它是一个只包含一个抽象方法的接口。函数式接口的主要目的是支持 Lambda 表达式和方法引用,使得函数式编程更加容易和方便。

2.函数式接口的定义?

函数式接口有一个特殊的注解 @FunctionalInterface,用来标识该接口是一个函数式接口。如果一个接口使用了 @FunctionalInterface 注解,并且不满足函数式接口的条件(拥有多个抽象方法),编译器将会报错。

以下是一个简单的函数式接口示例:

@FunctionalInterfaceinterface MyFunction {    int apply(int a, int b);}

在上面的示例中,MyFunction 是一个函数式接口,因为它只有一个抽象方法 apply

你可以使用 Lambda 表达式或方法引用来实现函数式接口的实例,例如:

MyFunction add = (a, b) -> a + b;MyFunction subtract = (a, b) -> a - b;

3.常用的函数式接口

以下是一些常用的函数式接口:

  1. Consumer(java.util.function.Consumer):接受一个输入参数,但不返回结果,通常用于执行某些操作。
  2. Supplier (java.util.function.Supplier):表示一个供应商,它不接受参数,但返回一个值。在函数式编程中,常用于延迟计算或提供初始值。
  3. Function (java.util.function.Function):表示一个函数,它接受一个参数类型为 T 的对象,然后返回一个类型为 R 的结果对象。
  4. Predicate (java.util.function.Predicate):表示一个断言,它接受一个参数类型为 T 的对象,返回一个布尔值,用于判断对象是否满足某个条件。
  5. UnaryOperator (java.util.function.UnaryOperator):是一个特殊的 Function,输入和输出类型都是相同的。用于表示只接受一个参数并返回相同类型结果的操作。
  6. BinaryOperator (java.util.function.BinaryOperator):是一个特殊的 Function,输入和输出类型都是相同的。用于表示接受两个参数并返回一个相同类型结果的操作。
  7. BiFunction (java.util.function.BiFunction):与 Function 类似,但接受两个参数类型分别为 TU 的对象,然后返回一个类型为 R 的结果对象。
  8. Consumer 接口的变种: 除了常规的 Consumer,还有 IntConsumerLonGConsumerDoubleConsumer 分别用于处理整数、长整数和双精度浮点数。

这些函数式接口可以通过 Java 8 中的 java.util.function 包来使用,它们在函数式编程和 Lambda 表达式的应用中非常有用,可以让代码更加简洁和易于理解。

二.Consumer

1.Consumer 介绍

Consumer 可以在函数式编程中的很多场景中使用,例如遍历集合并执行某种操作,执行异步任务的回调等。

是的,除了 Consumer,Java 8 引入了一系列函数式接口,用于支持不同类型的函数式操作。

在 Java 8 中,Consumer 是一个函数式接口,它定义了一个接受一个参数并且不返回任何结果的操作。它在函数式编程中常用于表示一个可以对传入的参数执行某种操作的函数。

Consumer 接口中的抽象方法是 accept(T t),其中 T 是输入参数的类型。下面是 Consumer 接口的定义:

@FunctionalInterfacepublic interface Consumer<T> {    void accept(T t);    // 其他默认方法和静态方法省略}

函数式接口的注解 @FunctionalInterface 表示该接口是一个函数式接口,即只包含一个抽象方法。这样的接口可以使用 Lambda 表达式来实例化。

Consumer 接口有一个抽象方法 accept(T t),该方法接受一个参数类型为 T 的对象,并对该对象进行操作,但不返回任何结果。

“Consumer” 是 Java 中的一个函数式接口,它属于 Java.util.function 包。函数式接口是指只包含一个抽象方法的接口。Consumer 接口表示一个接受单个输入参数并且不返回结果的操作。它通常用于接受某个对象,并对其执行一些操作,比如修改对象的状态或者打印信息。

2.Consumer 使用

下面是 Consumer 的简单示例:

import java.util.function.Consumer;public class ConsumerExample {    public static void main(String[] args) {        // 使用 Consumer 打印字符串        Consumer<String> printConsumer = str -> System.out.println(str);        printConsumer.accept("Hello, world!");        // 使用 Consumer 修改集合中的元素        List<String> names = new ArrayList<>();        names.add("Alice");        names.add("Bob");        names.add("Charlie");        Consumer<List<String>> modifyConsumer = list -> {            for (int i = 0; i < list.size(); i++) {                list.set(i, list.get(i).toUpperCase());            }        };        modifyConsumer.accept(names);        System.out.println(names); // 输出: [ALICE, BOB, CHARLIE]    }}

在上面的示例中,我们创建了两个不同的 Consumer 实例,一个用于打印字符串,另一个用于将集合中的元素转换为大写。accept 方法负责执行相应的操作。

3.Consumer 参数传递

import java.util.Arrays;import java.util.List;public class ConsumerExample {    public static void main(String[] args) {        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");        // 使用 Consumer 接口打印每个名字        names.forEach(name -> {            Consumer<String> printName = s -> System.out.println(s);            printName.accept(name);        });    }}

上述代码使用了 forEach 方法,将 Consumer 接口作为参数传递,以打印每个名字。Lambda 表达式使得代码更为简洁和易读。

三.Supplier

1.什么是 Supplier?

“Supplier” 是 Java 编程语言中的一个函数式接口(Functional Interface)。在 Java 8 中引入了函数式编程的特性,为了支持这一特性,引入了一些新的函数式接口,其中 Supplier 就是其中之一。

在函数式编程中,函数是一等公民,这意味着可以将函数作为参数传递给其他函数,也可以从函数中返回函数。Supplier 是一个代表生产(提供)数据的函数式接口。它不接受任何参数,但返回一个值。它的声明如下:

@FunctionalInterfacepublic interface Supplier<T> {    T get();}

这里,T 是返回值的类型。get 方法不接受任何参数,但返回类型为 T 的值。

2.获取随机数

使用 Supplier 的一个例子是延迟计算,其中某个值只有在需要的时候才会被计算。例如:

import java.util.function.Supplier;public class SupplierExample {    public static void main(String[] args) {        // 使用 Supplier 创建一个延迟计算的值        Supplier<Double> randomSupplier = () -> Math.random();        // 获取值        double randomValue = randomSupplier.get();        System.out.println("Random value: " + randomValue);    }}

在上面的例子中,randomSupplier 是一个 Supplier,它在调用 get 方法时返回一个随机的 double 值。这样,我们可以在需要随机值的地方调用 get 方法。

函数式接口的引入使得在 Java 中更容易进行函数式编程,带来了更简洁、灵活的代码编写方式。

3.安全的 DateFORMat

创建 ThreadLocal 对象

//创建线程安全的DateFormatpublic final static ThreadLocal<DateFormat> formatter = withInitial(() -> new SimpleDateFormat("dd-MMM-yyyy"));

源码:

//可以看到参数是Supplier,表示不要参数,返回一个值public static <S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier) {    return new SuppliedThreadLocal<>(supplier);}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

来源地址:https://blog.csdn.net/qyj19920704/article/details/134855117

--结束END--

本文标题: 【Java系列】函数式接口编程

本文链接: https://lsjlt.com/news/551551.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【Java系列】函数式接口编程
    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,...
    99+
    2023-12-23
    java 开发语言
  • java之函数式接口解读
    目录一、函数式接口@FunctionalInterface注解性能浪费的日志案例使用Lambda优化日志案例使用Lambda作为参数和返回值二、常用函数式接口Supplier接口Co...
    99+
    2023-03-01
    java函数式接口 java接口 函数式接口
  • Java常用函数式接口总结
    四大函数式接口 新时代的程序员:lambda 表达式,链式编程,函数式接口,Stream 流式计算 函数式接口: 只有一个方法的接口 @FunctionalInterface...
    99+
    2024-04-02
  • 详细介绍Java函数式接口
    目录Java—函数式接口1.自定义函数式接口1.1概述1.2格式1.3@FunctionalInterface注解1.4自定义函数式接口2.函数式编程2.1Lambda的延迟执行2....
    99+
    2024-04-02
  • java中什么是函数式接口
    这篇文章给大家介绍java中什么是函数式接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型...
    99+
    2023-06-14
  • java中有哪些函数式接口
    java中有哪些函数式接口?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于J...
    99+
    2023-06-14
  • 如何使用java函数式接口
    这篇文章主要介绍了如何使用java函数式接口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、函数式接口的由来我们知道使用Lambda表达式的前提是需要有函数式接口,而Lam...
    99+
    2023-06-15
  • java函数式接口怎么应用
    这篇文章主要介绍了java函数式接口怎么应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java函数式接口怎么应用文章都会有所收获,下面我们一起来看看吧。一、函数式接口概念函数式接口在Java中是指:有且仅有...
    99+
    2023-07-05
  • 《Java 基础篇》之函数式接口
    目录 1、函数式接口概述 2、函数式接口做为方法的参数 3、函数式接口作为方法的返回值 3、常用的函数式接口 3.1、Supplier [səˈplaɪə(r)] Supplier接口 3.2、Consumer接口 3.3、Predicat...
    99+
    2023-10-20
    java 开发语言
  • 详解Java 中的函数式接口
    目录@FunctionalInterface注解最简单的函数式接口基础数据类型的函数表达式二元输入参数的函数Two-ArityFunctionSpecializationsSuppl...
    99+
    2024-04-02
  • 【Java 基础篇】Java 函数式接口详解
    文章目录 导言一、函数式接口的概念二、函数式接口的语法三、函数式接口的使用方法四、常用的函数式接口总结 导言 函数式接口是 Java 8 引入的重要特性,它允许将函数作为参数传递给方法,或者作为返回值返回。函数式接口主要用于...
    99+
    2023-08-16
    java jvm 开发语言
  • Java中的函数式编程
    目录1、Lambda2、函数接口2.1 函数描述符3、Java函数接口3.1 Predicate3.2 Consumer 3.3 Function3.4 Supplier3.5 Pr...
    99+
    2024-04-02
  • Java 函数式编程梳理
    目录一、Lambda表达式 1.1 函数式编程思想概述1.2 体验Lambda表达式1.3 Lambda表达式的标准格式1.4 Lambda表达式的练习1.5 Lambda...
    99+
    2024-04-02
  • java提供的4种函数式接口
    目录1、什么是函数式接口2.java提供四种类型的函数式接口1、什么是函数式接口 函数接口是只有一个抽象方法的接口,用作 Lambda 表达式的类型。使用@FunctionalInt...
    99+
    2024-04-02
  • Java常用函数式接口有哪些
    这篇文章主要介绍“Java常用函数式接口有哪些”,在日常操作中,相信很多人在Java常用函数式接口有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java常用函数式接口有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-20
  • java怎么自定义函数式接口
    这篇文章给大家分享的是有关java怎么自定义函数式接口的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、说明只包含抽象方法的界面,称为函数界面。可以通过Lambda表达式创建该界面的对象。如果Lambda表达式抛...
    99+
    2023-06-15
  • java内置函数式接口怎么用
    这篇文章主要讲解了“java内置函数式接口怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java内置函数式接口怎么用”吧!1、Predicate是布尔型函数,只有一个输入参数。Pred...
    99+
    2023-06-30
  • Java Lambda表达式常用的函数式接口
    目录Supplier接口Consumer接口Predicate接口Function接口BiFunction接口基本数据类型Supplier相关的接口Consumer相关的接口Pred...
    99+
    2024-04-02
  • Java特性 Lambda 表达式和函数式接口
    目录Java Lambda表达式起源&概念语法简单例子Lambda简化Runnable例子代码分析自定义接口实现lambda函数式接口概念备注格式@FunctionalInt...
    99+
    2024-04-02
  • Java编程接口详细
    目录一、抽象类和抽象方法二、接口三、Java中的多重继承四、通过继承来扩展接口1、组合接口时的名字冲突五、适配接口六、接口中的域七、嵌套接口1.类中的接口2.接口中的接口八、接口与工...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作