当前位置: 首页 > wzjs >正文

重庆大渡口营销型网站建设公司推荐网站seo优化检测

重庆大渡口营销型网站建设公司推荐,网站seo优化检测,未央免费做网站,传统网站建设架构在平常开发中,我们经常遇到这样一类过程:有一定计算量,被频繁调用,但对于任意一个参数,结果是恒定的(换句话说,就是纯函数),为了减少频繁调用的性能开销,我们…

在平常开发中,我们经常遇到这样一类过程:有一定计算量,被频繁调用,但对于任意一个参数,结果是恒定的(换句话说,就是纯函数),为了减少频繁调用的性能开销,我们可能会写出这样的代码:

public class ExampleUnitTest {Map<Integer, String> cacheMap = new HashMap<>();public String doTaskWithCache(Integer i) {String s = cacheMap.get(i); // 先检查是否有缓存if (s == null) {s = calculateResult(i);cacheMap.put(i, s);  // 计算结果存到缓存里}return s;}
}

但是,这样写的话,每次有需要带缓存的函数,创建缓存以及检查结果是否已缓存的那代码就得重写一遍,想想就有些麻烦,本文就介绍一个简单的工具Memorizer来简化这个过程。

Memorizer 的实现

因为实现代码比较少,我们看实现代码

public class Memorizer<T, V> {public static <T, V> Function<T, V> memorize(Function<T, V> function) {Map<T, V> cacheMap = new HashMap<>();return (T t) -> Optional.ofNullable(cacheMap.get(t)).orElseGet(() -> {V value = function.apply(t);cacheMap.put(t, value);return value;});}public static <T, V> Function<T, V> weakMemorize(Function<T, V> function) {Map<T, V> cacheMap = new WeakHashMap<>();return (T t) -> Optional.ofNullable(cacheMap.get(t)).orElseGet(() -> {V value = function.apply(t);cacheMap.put(t, value);return value;});}
}

这个工具有两个方法,都接受一个单参函数作为参数,并返回一个同类型的单参函数,意思是:传入要缓存的函数,返回该函数的带缓存的版本。

weakMemorize方法返回的函数的缓存可能会被回收,适合那些内存资源紧张或者想减少内存压力的场景,不过这也会导致一定概率的缓存失效的情况。

Memorizer 的使用

我们用``来改写上面的例子,就成了:

public class ExampleUnitTest {private Function<Integer, String> doTaskWithCache = (i) -> calculateResult(i);
}

写在最后

这里只给出了单参数的实现,如果要考虑多参数的缓存,可以尝试用下面这种方式扩展:

public class Memorizer<T, V> {public static <T1, T2, V, K> BiFunction<T1, T2, V> memorize(BiFunction<T1, T2, V> function, BiFunction<T1, T2, K> keyExtractor) {Map<K, V> cacheMap = new HashMap<>();return (t1, t2) -> {K key = keyExtractor.apply(t1, t2);return Optional.ofNullable(cacheMap.get(key)).orElseGet(() -> {V value = function.apply(t1, t2);cacheMap.put(key, value);return value;});};}public static <T1, T2, V, K> BiFunction<T1, T2, V> weakMemorize(BiFunction<T1, T2, V> function, BiFunction<T1, T2, K> keyExtractor) {Map<K, V> cacheMap = new WeakHashMap<>();return (t1, t2) -> {K key = keyExtractor.apply(t1, t2);return Optional.ofNullable(cacheMap.get(key)).orElseGet(() -> {V value = function.apply(t1, t2);cacheMap.put(key, value);return value;});};}
}
http://www.dtcms.com/wzjs/474577.html

相关文章:

  • 全国交通建设网官方网站哪些广告平台留号码
  • 网站开发方案及报价it培训机构靠谱吗
  • 用微软雅黑做网站可以吗员工培训内容
  • 什么平台做网站自己的网站怎么在百度上面推广
  • 网站人员队伍建设薄弱google搜索引擎官网
  • 微信是哪家公司开发的莆田百度seo公司
  • 抓取的网站如何做seo搜索引擎优化公司排行
  • 做效果图的网站有哪些深圳关键词推广
  • 山东省建设教育信息网站首页外链发布软件
  • 用手机做网站的app指数基金怎么买才赚钱
  • 可做易企秀的网站google seo怎么做
  • 上海专业网站建设报价百度竞价优化软件
  • 做网站(信科网络)百度产品大全首页
  • 南阳做网站优化哪家好网站推广的软件
  • 杭州知名的企业网站建设厦门网站优化公司
  • 网站建设需要php吗百度收录的网站
  • 织梦怎么做单页网站单页网站模板
  • 做电子外贸网站我想接app注册推广单
  • 建筑设计公司属于什么行业类别福州seo关键字推广
  • 网页设计与网站建设作业中国移动有免费的视频app
  • 网站建设项目创业计划书福州seo招聘
  • 广州网站排名优化开发互联网推广与营销
  • 文本文档写入代码做网站不知怎么入门
  • 建筑工程教育网官网做seo网页价格
  • 24小时学会网站建设 下载国际新闻报道
  • 选服务好的网站建设公司站长工具seo综合查询可以访问
  • 网站制作作业同仁seo排名优化培训
  • 福州网站建设哪家专业seo 百度网盘
  • 个人做网站备案多少钱杭州产品推广服务公司
  • 网站sem优化怎么做类聚seo