diff --git a/src/main/java/br/ufrgs/inf/prosoft/cache/Cache.java b/src/main/java/br/ufrgs/inf/prosoft/cache/Cache.java
index 94c7fea..35c1aa9 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/cache/Cache.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/cache/Cache.java
@@ -5,7 +5,7 @@
*/
package br.ufrgs.inf.prosoft.cache;
-import java.util.function.Function;
+import java.util.function.Supplier;
/**
*
@@ -23,23 +23,23 @@ public interface Cache<K, V> {
public void invalidate(K key);
- public default V computeIfAbsent(K key, Function<K, V> function, long timeToLive) {
+ public default V computeIfAbsent(K key, Supplier<V> supplier, long timeToLive) {
V get = get(key);
if (get != null) {
return get;
}
- V apply = function.apply(key);
- put(key, apply, timeToLive);
- return apply;
+ get = supplier.get();
+ put(key, get, timeToLive);
+ return get;
}
- public default V computeIfAbsent(K key, Function<K, V> function) {
+ public default V computeIfAbsent(K key, Supplier<V> supplier) {
V get = get(key);
if (get != null) {
return get;
}
- V apply = function.apply(key);
- put(key, apply);
- return apply;
+ get = supplier.get();
+ put(key, get);
+ return get;
}
}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/cache/GetterCache.java b/src/main/java/br/ufrgs/inf/prosoft/cache/GetterCache.java
index c9936b5..997985e 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/cache/GetterCache.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/cache/GetterCache.java
@@ -5,6 +5,7 @@
*/
package br.ufrgs.inf.prosoft.cache;
+import java.util.function.Supplier;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -72,4 +73,23 @@ public class GetterCache<V> {
this.cachingPerformance.registerInvalidation();
}
+ public V computeIfAbsent(Supplier<V> supplier, long timeToLive) {
+ V get = get();
+ if (get != null) {
+ return get;
+ }
+ get = supplier.get();
+ put(get, timeToLive);
+ return get;
+ }
+
+ public V computeIfAbsent(Supplier<V> supplier) {
+ V get = get();
+ if (get != null) {
+ return get;
+ }
+ get = supplier.get();
+ put(get);
+ return get;
+ }
}