Supplier JAVA_使用Supplier Java 8进行缓存
好的,让我们以较小的步骤重写代码,转向更老式,冗长的Java.
也许这使得理解起来更简单.
第一步:摆脱lambda:
public static Supplier memoize(final Supplier extends T> valueSupplier)
{
final List memoryList= new ArrayList<>();
return new Supplier() {
@Override
public T get() {
if (memoryList.isEmpty()) {
memoryList.add(valueSupplier.get());
}
return memoryList.get(0);
}
};
}
下一步:将匿名内部类提取到独立类中.
虽然匿名类可以访问其包含方法(memoryList)的局部变量,但是“普通”类没有,所以我们将列表移动到缓存供应商中.
class CachingSupplier implements Supplier {
final List memoryList= new ArrayList<>();
private Supplier originalSupplier;
public CachingSupplier(Supplier originalSupplier) {
this.originalSupplier = originalSupplier;
}
@Override
public T get() {
if (memoryList.isEmpty()) {
memoryList.add(originalSupplier.get());
}
return memoryList.get(0);
}
}
public static Supplier memoize(final Supplier extends T> valueSupplier) {
return new CachingSupplier<>(valueSupplier);
}
最后,让我们用一个简单的引用替换ArrayList.
class CachingSupplier implements Supplier {
private T cachedValue;
private Supplier originalSupplier;
public CachingSupplier(Supplier originalSupplier) {
this.originalSupplier = originalSupplier;
}
@Override
public T get() {
if (cachedValue == null) {
cachedValue = originalSupplier.get();
}
return cachedValue;
}
}
public static Supplier memoize(final Supplier extends T> valueSupplier) {
return new CachingSupplier<>(valueSupplier);
}
也许这更容易理解.如果您仍然不清楚某些事情,请在评论中提问我会试着解释一下.
Supplier JAVA_使用Supplier Java 8进行缓存相关推荐
- Supplier JAVA_「supplier」java1.8之supplier理解 - seo实验室
supplier supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,看下面代码: public class TestSupplier { private int age; T ...
- java 手写缓存,java手写多级缓存
packagecom.ws.commons.cache;importjava.util.function.Supplier;importcom.ws.commons.tool.ThreadTool;/ ...
- Supplier JAVA_Java 8 Supplier 使用
Java 8 Supplier 使用 在Java 8, Supplier是一个函数接口,它没有参数,返回了一个T.查了下字典,supplier被翻译成"供应商",那么它到底供应了啥 ...
- html访问java接口出现缓存_一个牛逼的多级缓存实现方案
点击上方"java进阶架构师",选择右上角"置顶公众号" 20大进阶架构专题每日送达 TMC,即"透明多级缓存(Transparent Multile ...
- java 多线程写缓存,Java多线程_缓存对齐
1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...
- java整型缓存_JAVA整型包装类的缓存策略
Java Integer的缓存策略 public classJavaIntegerCache {public static voidmain(String... strings) { Integer ...
- java缓存_使用Redis和Java进行数据库缓存
数据库缓存是处理这些性能问题的最常见策略之一.缓存涉及将数据库查询的结果保存在更快,更容易访问的位置.正确完成后,缓存将减少查询响应时间,减少数据库负载并降低成本. 但是,缓存也需要小心处理,因为它们 ...
- java实现lru缓存_Java中的LRU缓存实现
java实现lru缓存 什么是LRU缓存? (What is LRU Cache?) LRU Cache stands for Least Recently Used Cache. The size ...
- java整型缓存_java整型缓存
缓存大家应该都听说过,像计算机中的缓存用于提高计算机性能,浏览器的缓存会在下一次访问该网站时一定程度上提高访问速度.通常缓存是用空间换时间,那么java中既节省了内存又提高了效率的缓存大家是否知道呢? ...
最新文章
- 计算机ppt继续教育,泰州市专业技术人员继续教育公需科目PPT2010试卷及答案
- elasticsearch 运行原理
- 【运筹学】线性规划数学模型 ( 单纯形法 | 最优解判定原则 | 线性规划求解示例 )
- linux 远程 i o 错误,故意在Linux中导致I / O错误?
- 读不完的顶会Paper,我该如何读论文?
- 使用PowerMock模拟构造函数
- 【笔记】用正则匹配字符串的方法摘抄
- html5登录界面源代码_最新版本尤娜博客已更新源代码(速拿!!!)
- 一个菜鸟怎样做好功能测试?
- OC中类别、扩展、协议与托付
- jq和thinkphp经常使用的几种ajax
- JavaScript 事件-事件流,事件冒泡,事件捕获,事件绑定与解绑,事件委托、阻止冒泡、阻止默认行为详细篇
- Blender 制作刀光特效所用模型
- 致此刻选专业发愁的你 | 从学技术到做CEO:电子信息类专业在大学时期的正确打怪升级路径
- 关于向社会公开征求《深圳市住房公积金贷款管理暂行规定》(征求意见稿)意见的通知
- Python中的re.search和re.group用法
- SharePoint Designer 2013 和 Visio 2013 中的工作流开发
- 金堂五月花计算机学校招聘,2019年成都市金堂五月花学校招生简介
- 公网ipv6远程桌面
- 手把手教你:基于LSTM的股票预测系统