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 }