MoreSuppliers类

news/2024/11/15 4:14:31/

概述

MoreSuppliers类是一个Java工具类,它提供了一些增强的Supplier函数,使得Supplier执行的结果可以被缓存,真正的调用只执行一次。

public static <T> CloseableSupplier<T> lazy(Supplier<T> delegate):

这个方法返回一个懒加载的提供器,首次获取值时通过delegate加载值,并缓存这个值,在后续获取时直接返回这个缓存的值。这个方法的使用场景是当你有一个计算成本较高或者IO操作的Supplier,并且你希望只执行一次这个操作,然后缓存结果以供后续使用。

示例:

Supplier<String> expensiveOperation = () -> {// Some expensive operation...return "result";};Supplier<String> lazySupplier = MoreSuppliers.lazy(expensiveOperation);String result = lazySupplier.get();  // The expensive operation is performed here.String cachedResult = lazySupplier.get();  // The cached result is returned here.

public static <T> CloseableSupplier<T> lazy(Supplier<T> delegate, boolean resetAfterClose):

这个方法和上一个方法类似,但是它允许在关闭提供器返回的资源后,是否释放缓存的对象。这个方法的使用场景是当你的Supplier返回的是一个需要关闭的资源,比如一个数据库连接,你希望在关闭这个资源后,下次调用get()方法时重新获取一个新的资源。

示例:

Supplier<Connection> connectionSupplier = () -> {// Get a connection from the database...return connection;};CloseableSupplier<Connection> lazySupplier = MoreSuppliers.lazy(connectionSupplier, true);Connection connection = lazySupplier.get();  // The connection is obtained here.lazySupplier.tryClose(Connection::close);  // The connection is closed here.Connection newConnection = lazySupplier.get();  // A new connection is obtained here.

public static <T, X extends Throwable> CloseableThrowableSupplier<T, X> lazyEx(ThrowableSupplier<T, X> delegate):

这个方法返回一个懒加载的提供器,支持异常类型声明。这个方法的使用场景是当你的Supplier可能抛出一个异常,你希望这个异常能被正确地传播出去。

示例:

ThrowableSupplier<String, IOException> ioOperation = () -> {// Some IO operation...return "result";};ThrowableSupplier<String, IOException> lazySupplier = MoreSuppliers.lazyEx(ioOperation);try {String result = lazySupplier.get();  // The IO operation is performed here.} catch (IOException e) {// Handle the exception...}

public static <T, X extends Throwable> CloseableThrowableSupplier<T, X> lazyEx(ThrowableSupplier<T, X> delegate, boolean resetAfterClose):

这个方法和上一个方法类似,但是它允许在关闭提供器返回的资源后,是否释放缓存的对象。这个方法的使用场景是当你的Supplier返回的是一个需要关闭的资源并且可能抛出一个异常,你希望在关闭这个资源后,下次调用get()方法时重新获取一个新的资源,并且异常能被正确地传播出去。

示例:

ThrowableSupplier<Connection, SQLException> connectionSupplier = () -> {// Get a connection from the database...return connection;};CloseableThrowableSupplier<Connection, SQLException> lazySupplier = MoreSuppliers.lazyEx(connectionSupplier, true);try {Connection connection = lazySupplier.get();  // The connection is obtained here.lazySupplier.tryClose(Connection::close);  // The connection is closed here.Connection newConnection = lazySupplier.get();  // A new connection is obtained here.} catch (SQLException e) {// Handle the exception...}

public static <T> AsyncSupplier<T> asyncLazyEx(Supplier<T> delegate, Supplier<T> pendingSupplier, String threadName):

这个方法返回一个异步加载的提供器,通过异步线程来完成初始化操作,支持超时。当超过指定的时间没有获取初始值成功时,使用pendingSupplier提供的值作为托底。这个方法的使用场景是当你的Supplier需要花费较长的时间来获取值,你希望这个操作能在一个单独的线程中进行,而主线程可以继续执行其他任务。

示例:

Supplier<String> slowOperation = () -> {// Some slow operation...return "result";};Supplier<String> fallback = () -> "fallback";AsyncSupplier<String> asyncSupplier = MoreSuppliers.asyncLazyEx(slowOperation, fallback, "InitThread");String result = asyncSupplier.get(Duration.ofSeconds(5));  // The slow operation is performed in a separate thread. If it takes more than 5 seconds, the fallback value is returned.

public static <T> AsyncSupplier<T> asyncLazyEx(Supplier<T> delegate, String threadName):

这个方法和上一个方法类似,但是它没有提供托底的Supplier,如果异步初始化值超时,它将返回null。

示例:

Supplier<String> slowOperation = () -> {// Some slow operation...return "result";};AsyncSupplier<String> asyncSupplier = MoreSuppliers.asyncLazyEx(slowOperation, "InitThread");String result = asyncSupplier.get(Duration.ofSeconds(5));  // The slow operation is performed in a separate thread. If it takes more than 5 seconds, null is returned.

public static <T> AsyncSupplier<T> asyncLazyEx(Supplier<T> delegate):

这个方法和上一个方法类似,但是它没有指定执行初始化操作的线程名称。

示例:

Supplier<String> slowOperation = () -> {// Some slow operation...return "result";};AsyncSupplier<String> asyncSupplier = MoreSuppliers.asyncLazyEx(slowOperation);String result = asyncSupplier.get(Duration.ofSeconds(5));  // The slow operation is performed in a separate thread. If it takes more than 5 seconds, null is returned.

CloseableSupplier<T>:

这是一个可关闭的Supplier实现,支持通过tryClose(ThrowableConsumer<T, X>closer)方法关闭提供器返回的资源。

示例:

CloseableSupplier<Connection> connectionSupplier = MoreSuppliers.lazy(() -> {// Get a connection from the database...return connection;}, true);Connection connection = connectionSupplier.get();  // The connection is obtained here.connectionSupplier.tryClose(Connection::close);  // The connection is closed here.

CloseableThrowableSupplier<T, X>:

这是一个可关闭的Supplier实现,支持异常类型声明,通过tryClose(ThrowableConsumer<T, X> closer)方法关闭提供器返回的资源。

示例:

CloseableThrowableSupplier<Connection, SQLException> connectionSupplier = MoreSuppliers.lazyEx(() -> {// Get a connection from the database...return connection;}, true);try {Connection connection = connectionSupplier.get();  // The connection is obtained here.connectionSupplier.tryClose(Connection::close);  // The connection is closed here.} catch (SQLException e) {// Handle the exception...}

AsyncSupplier<T>:

这是一个异步加载的Supplier实现,通过异步线程来完成初始化操作,支持超时。当超过指定的时间没有获取初始值成功时,使用pendingSupplier提供的值作为托底。

示例:

Supplier<String> slowOperation = () -> {// Some slow operation...return "result";};Supplier<String> fallback = () -> "fallback";AsyncSupplier<String> asyncSupplier = MoreSuppliers.asyncLazyEx(slowOperation, fallback, "InitThread");String result = asyncSupplier.get(Duration.ofSeconds(5));  // The slow operation is performed in a separate thread. If it takes more than 5 seconds, the fallback value is returned.

参考:

https://github.com/PhantomThief/more-lambdas-java/blob/master/core/src/main/java/com/github/phantomthief/util/MoreSuppliers.java


http://www.ppmy.cn/news/125222.html

相关文章

5年经验之谈:月薪3000到30000,测试工程师的变“行”记

自我介绍下&#xff0c;我是一名转IT测试人&#xff0c;我的专业是化学&#xff0c;去化工厂实习才发现这专业的坑人之处&#xff0c;化学试剂害人不浅&#xff0c;有毒&#xff0c;易燃易爆&#xff0c;实验室经常用丙酮&#xff0c;甲醇&#xff0c;四氯化碳&#xff0c;接触…

多芬洗衣机洗衣流程

家里买了个电脑全自动洗衣机&#xff0c;但是因为农村硬件跟不上&#xff0c;要自己进水&#xff0c;花了一些时间观察&#xff0c;自用。

波轮全自动洗衣机典型故障分析与检修

一、整机不工作整机不工作故障的主要原因&#xff1a;一是供电线路异常&#xff0c;二是熔断器熔断。 二、指示灯亮&#xff0c;但不能进水指示灯亮&#xff0c;但不能进水的故障原因主要有&#xff1a;第一是供水管路异常&#xff0c;第二是水位开关异常&#xff0c;第三是进…

小米米家波轮洗衣机尊享版 评测

小米首款采用DD直驱电机的波轮洗衣机&#xff0c;动力十足的DD直驱电机&#xff0c;从源头降噪&#xff0c;洗涤噪音低至50dB。精准控制内桶转动角度&#xff0c;洗衣更护衣。米家波轮洗衣机尊享版新品活动188红包等你抢机会不容错过 http://xiaomi.adiannao.cn/1 它能自动感知…

洗衣机漏水怎么维修?洗衣机漏水怎么处理

​如今每个家庭都会有洗衣机&#xff0c;可以提高人们的日常幸福感&#xff0c;但许多人在使用洗衣机时&#xff0c;经常会遇到洗衣机漏水的问题&#xff0c;这一直困扰着许多家庭&#xff0c;那么到底为什么洗衣机会漏水?今日就为您介绍洗衣机漏水的原因及解决办法。 ​ 编辑…

西门子滚筒洗衣机教程_西门子滚筒洗衣机图解

现在人们不用再像以前那样烧水洗澡或者洗碗了&#xff0c;因为现在有很多热水器&#xff0c;这些热水器可以给我们提供热水。市面上热水器的种类繁多&#xff0c;比如有燃气热水器、电热水器、空气能热水器等等&#xff0c;不同种类的热水器的工作原理、安装方法、适用范围等都…

招聘网站—Hive数据分析

招聘网站—Hive数据分析 第1关&#xff1a;统计最热门的十种职业&#xff08;招聘人数最多&#xff09; #进入hive hive#在hive中创建数据库 mydb create database mydb;#使用数据库 mydb use mydb;#创建表 recruitcleaned 并使用"/t"分割字段 create table re…

如何搭建高质量的 B 端产品帮助体系?

在B2B市场中&#xff0c;产品的质量和支持服务对于企业的成功至关重要。帮助中心是B2B企业提供优质支持服务的重要组成部分。那么&#xff0c;如何搭建高质量的B端产品帮助体系呢&#xff1f;本文将为大家介绍一些关键的步骤和方法。 一、了解用户需求 首先&#xff0c;要搭建…