1 package au.gov.amsa.ais.rx; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import rx.functions.Func1; 7 8 public class Cache<S, T> { 9 10 private final Func1<S, T> factory; 11 12 public Cache(Func1<S, T> factory) { 13 this.factory = factory; 14 } 15 16 private final Map<S, T> map = new HashMap<S, T>(); 17 18 public synchronized Cache<S, T> put(S key, T value) { 19 map.put(key, value); 20 return this; 21 } 22 23 public synchronized T get(S key) { 24 T value = map.get(key); 25 if (value == null) { 26 T t = factory.call(key); 27 map.put(key, t); 28 return t; 29 } else 30 return value; 31 } 32 }