定制品牌排行榜前十名,如何优化网络连接,电子商务网站建设的需求,wordpress链接在哪里设置密码#x1f49d;#x1f49d;#x1f49d;欢迎来到我的博客#xff0c;很高兴能够在这里和您见面#xff01;希望您在这里可以感受到一份轻松愉快的氛围#xff0c;不仅可以获得有趣的内容和知识#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学… 欢迎来到我的博客很高兴能够在这里和您见面希望您在这里可以感受到一份轻松愉快的氛围不仅可以获得有趣的内容和知识也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂 非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。 ✨✨ 欢迎订阅本专栏 ✨✨ 博客目录 一.基本介绍1.什么是函数式接口?2.函数式接口的定义?3.常用的函数式接口 二.Consumer1.Consumer 介绍2.Consumer 使用3.Consumer 参数传递 三.Supplier1.什么是 Supplier?2.获取随机数3.安全的 DateFormat 一.基本介绍
1.什么是函数式接口?
在 Java 中函数接口通常指的是函数式接口Functional Interface。函数式接口是 Java 8 引入的一个特性它是一个只包含一个抽象方法的接口。函数式接口的主要目的是支持 Lambda 表达式和方法引用使得函数式编程更加容易和方便。
2.函数式接口的定义?
函数式接口有一个特殊的注解 FunctionalInterface用来标识该接口是一个函数式接口。如果一个接口使用了 FunctionalInterface 注解并且不满足函数式接口的条件拥有多个抽象方法编译器将会报错。
以下是一个简单的函数式接口示例
FunctionalInterface
interface MyFunction {int apply(int a, int b);
}在上面的示例中MyFunction 是一个函数式接口因为它只有一个抽象方法 apply。
你可以使用 Lambda 表达式或方法引用来实现函数式接口的实例例如
MyFunction add (a, b) - a b;
MyFunction subtract (a, b) - a - b;3.常用的函数式接口
以下是一些常用的函数式接口
Consumer(java.util.function.ConsumerT)接受一个输入参数但不返回结果通常用于执行某些操作。Supplier (java.util.function.SupplierT)表示一个供应商它不接受参数但返回一个值。在函数式编程中常用于延迟计算或提供初始值。Function (java.util.function.FunctionT, R)表示一个函数它接受一个参数类型为 T 的对象然后返回一个类型为 R 的结果对象。Predicate (java.util.function.PredicateT)表示一个断言它接受一个参数类型为 T 的对象返回一个布尔值用于判断对象是否满足某个条件。UnaryOperator (java.util.function.UnaryOperatorT)是一个特殊的 Function输入和输出类型都是相同的。用于表示只接受一个参数并返回相同类型结果的操作。BinaryOperator (java.util.function.BinaryOperatorT)是一个特殊的 Function输入和输出类型都是相同的。用于表示接受两个参数并返回一个相同类型结果的操作。BiFunction (java.util.function.BiFunctionT, U, R)与 Function 类似但接受两个参数类型分别为 T 和 U 的对象然后返回一个类型为 R 的结果对象。Consumer 接口的变种 除了常规的 Consumer还有 IntConsumer、LongConsumer、DoubleConsumer 分别用于处理整数、长整数和双精度浮点数。
这些函数式接口可以通过 Java 8 中的 java.util.function 包来使用它们在函数式编程和 Lambda 表达式的应用中非常有用可以让代码更加简洁和易于理解。
二.Consumer
1.Consumer 介绍
Consumer 可以在函数式编程中的很多场景中使用例如遍历集合并执行某种操作执行异步任务的回调等。
是的除了 ConsumerJava 8 引入了一系列函数式接口用于支持不同类型的函数式操作。
在 Java 8 中Consumer 是一个函数式接口它定义了一个接受一个参数并且不返回任何结果的操作。它在函数式编程中常用于表示一个可以对传入的参数执行某种操作的函数。
Consumer 接口中的抽象方法是 accept(T t)其中 T 是输入参数的类型。下面是 Consumer 接口的定义
FunctionalInterface
public interface ConsumerT {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 打印字符串ConsumerString printConsumer str - System.out.println(str);printConsumer.accept(Hello, world!);// 使用 Consumer 修改集合中的元素ListString names new ArrayList();names.add(Alice);names.add(Bob);names.add(Charlie);ConsumerListString 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) {ListString names Arrays.asList(Alice, Bob, Charlie);// 使用 Consumer 接口打印每个名字names.forEach(name - {ConsumerString printName s - System.out.println(s);printName.accept(name);});}
}上述代码使用了 forEach 方法将 Consumer 接口作为参数传递以打印每个名字。Lambda 表达式使得代码更为简洁和易读。
三.Supplier
1.什么是 Supplier?
“Supplier” 是 Java 编程语言中的一个函数式接口Functional Interface。在 Java 8 中引入了函数式编程的特性为了支持这一特性引入了一些新的函数式接口其中 Supplier 就是其中之一。
在函数式编程中函数是一等公民这意味着可以将函数作为参数传递给其他函数也可以从函数中返回函数。Supplier 是一个代表生产提供数据的函数式接口。它不接受任何参数但返回一个值。它的声明如下
FunctionalInterface
public interface SupplierT {T get();
}这里T 是返回值的类型。get 方法不接受任何参数但返回类型为 T 的值。
2.获取随机数
使用 Supplier 的一个例子是延迟计算其中某个值只有在需要的时候才会被计算。例如
import java.util.function.Supplier;public class SupplierExample {public static void main(String[] args) {// 使用 Supplier 创建一个延迟计算的值SupplierDouble randomSupplier () - Math.random();// 获取值double randomValue randomSupplier.get();System.out.println(Random value: randomValue);}
}在上面的例子中randomSupplier 是一个 Supplier它在调用 get 方法时返回一个随机的 double 值。这样我们可以在需要随机值的地方调用 get 方法。
函数式接口的引入使得在 Java 中更容易进行函数式编程带来了更简洁、灵活的代码编写方式。
3.安全的 DateFormat
创建 ThreadLocal 对象
//创建线程安全的DateFormat
public final static ThreadLocalDateFormat formatter withInitial(() - new SimpleDateFormat(dd-MMM-yyyy));源码:
//可以看到参数是Supplier,表示不要参数,返回一个值
public static S ThreadLocalS withInitial(Supplier? extends S supplier) {return new SuppliedThreadLocal(supplier);
}觉得有用的话点个赞 呗。 ❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正 如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧