diff --git a/src/main/java/br/ufrgs/inf/prosoft/cache/Caffeine.java b/src/main/java/br/ufrgs/inf/prosoft/cache/Caffeine.java
index 89869c6..78fadb0 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/cache/Caffeine.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/cache/Caffeine.java
@@ -6,8 +6,11 @@
package br.ufrgs.inf.prosoft.cache;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
+import java.util.function.BiConsumer;
import java.util.stream.Collectors;
/**
@@ -104,6 +107,37 @@ public class Caffeine<K, V> implements Cache<K, V> {
registerEvent(EventType.INVALIDATION, null);
}
+ public boolean containsKey(K key) {
+ Optional<V> get = this.cache.getIfPresent(Optional.ofNullable(key));
+ return get != null;
+ }
+
+ public Set<Map.Entry<K, V>> entrySet() {
+ Set<Map.Entry<K, V>> entrySet = this.cache.asMap().entrySet().stream().collect(
+ Collectors.toMap(entry -> entry.getKey().orElse(null), entry -> entry.getValue().orElse(null)))
+ .entrySet();
+ if (CACHE_EVALUATE_PERFORMANCE) {
+ entrySet.forEach(entry -> {
+ registerEvent(EventType.HIT, entry.getValue());
+ });
+ }
+ return entrySet;
+ }
+
+ public void forEach(BiConsumer<K, V> consumer) {
+ entrySet().forEach(entry -> {
+ consumer.accept(entry.getKey(), entry.getValue());
+ });
+ }
+
+ public int size() {
+ return values().size();
+ }
+
+ public boolean isEmpty() {
+ return values().isEmpty();
+ }
+
private String getIdentifier(Object object) {
return object != null ? String.valueOf(object.hashCode()) : "null";
}