好的,让我们以较小的步骤重写代码,转向更老式,冗长的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进行缓存相关推荐

  1. Supplier JAVA_「supplier」java1.8之supplier理解 - seo实验室

    supplier supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,看下面代码: public class TestSupplier { private int age; T ...

  2. java 手写缓存,java手写多级缓存

    packagecom.ws.commons.cache;importjava.util.function.Supplier;importcom.ws.commons.tool.ThreadTool;/ ...

  3. Supplier JAVA_Java 8 Supplier 使用

    Java 8 Supplier 使用 在Java 8, Supplier是一个函数接口,它没有参数,返回了一个T.查了下字典,supplier被翻译成"供应商",那么它到底供应了啥 ...

  4. html访问java接口出现缓存_一个牛逼的多级缓存实现方案

    点击上方"java进阶架构师",选择右上角"置顶公众号" 20大进阶架构专题每日送达 TMC,即"透明多级缓存(Transparent Multile ...

  5. java 多线程写缓存,Java多线程_缓存对齐

    1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...

  6. java整型缓存_JAVA整型包装类的缓存策略

    Java Integer的缓存策略 public classJavaIntegerCache {public static voidmain(String... strings) { Integer ...

  7. java缓存_使用Redis和Java进行数据库缓存

    数据库缓存是处理这些性能问题的最常见策略之一.缓存涉及将数据库查询的结果保存在更快,更容易访问的位置.正确完成后,缓存将减少查询响应时间,减少数据库负载并降低成本. 但是,缓存也需要小心处理,因为它们 ...

  8. java实现lru缓存_Java中的LRU缓存实现

    java实现lru缓存 什么是LRU缓存? (What is LRU Cache?) LRU Cache stands for Least Recently Used Cache. The size ...

  9. java整型缓存_java整型缓存

    缓存大家应该都听说过,像计算机中的缓存用于提高计算机性能,浏览器的缓存会在下一次访问该网站时一定程度上提高访问速度.通常缓存是用空间换时间,那么java中既节省了内存又提高了效率的缓存大家是否知道呢? ...

最新文章

  1. 计算机ppt继续教育,泰州市专业技术人员继续教育公需科目PPT2010试卷及答案
  2. elasticsearch 运行原理
  3. 【运筹学】线性规划数学模型 ( 单纯形法 | 最优解判定原则 | 线性规划求解示例 )
  4. linux 远程 i o 错误,故意在Linux中导致I / O错误?
  5. 读不完的顶会Paper,我该如何读论文?
  6. 使用PowerMock模拟构造函数
  7. 【笔记】用正则匹配字符串的方法摘抄
  8. html5登录界面源代码_最新版本尤娜博客已更新源代码(速拿!!!)
  9. 一个菜鸟怎样做好功能测试?
  10. OC中类别、扩展、协议与托付
  11. jq和thinkphp经常使用的几种ajax
  12. JavaScript 事件-事件流,事件冒泡,事件捕获,事件绑定与解绑,事件委托、阻止冒泡、阻止默认行为详细篇
  13. Blender 制作刀光特效所用模型
  14. 致此刻选专业发愁的你 | 从学技术到做CEO:电子信息类专业在大学时期的正确打怪升级路径
  15. 关于向社会公开征求《深圳市住房公积金贷款管理暂行规定》(征求意见稿)意见的通知
  16. Python中的re.search和re.group用法
  17. SharePoint Designer 2013 和 Visio 2013 中的工作流开发
  18. 金堂五月花计算机学校招聘,2019年成都市金堂五月花学校招生简介
  19. 公网ipv6远程桌面
  20. 手把手教你:基于LSTM的股票预测系统

热门文章

  1. 键盘没坏,电脑键盘突然失灵,打不出字怎么办?
  2. 干货!什么是游戏外挂,外挂的种类及实现原理
  3. 金融经济学类课程资源
  4. 【ChatGPT的小妙招】结合Excel的vbs开发者工具达成对Excel文件的处理
  5. 计算机osta试题,全国计算机信息高新技术(osta)考试项目
  6. CocosCreator | 微信小游戏排行榜 微信开放域
  7. 优势谈判--读后感悟
  8. 如何设计一个秒杀服务
  9. 最新《PHP程序员就业指导-新手怎么打造PHP程序员简历》
  10. 人要像树一样活着--俞敏洪