View Javadoc
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  }