Javolution 6.0.0 java
MapView.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.util.internal.map;
10 
11 import java.io.Serializable;
12 import java.util.Iterator;
13 import java.util.Map;
14 
24 
29 public abstract class MapView<K, V> implements MapService<K, V> {
30 
35  protected class EntryComparator implements Equality<Entry<K,V>>, Serializable {
36  private static final long serialVersionUID = MapView.serialVersionUID;
37 
38  public EntryComparator() {
39  }
40 
41  @Override
42  public boolean areEqual(Entry<K, V> left, Entry<K, V> right) {
43  return keyComparator().areEqual(left.getKey(),
44  right.getKey());
45  }
46 
47  @Override
48  public int compare(Entry<K, V> left, Entry<K, V> right) {
49  return keyComparator().compare(left.getKey(),
50  right.getKey());
51  }
52 
53  @Override
54  public int hashCodeOf(Entry<K, V> e) {
55  return keyComparator().hashCodeOf(e.getKey());
56  }
57  }
58 
60  protected class EntrySet extends SetView<Entry<K, V>> {
61  private static final long serialVersionUID = MapView.serialVersionUID;
62  public EntrySet() {
63  super(null); // Actual target is the outer map.
64  }
65 
66  @Override
67  public boolean add(Entry<K, V> entry) {
68  put(entry.getKey(), entry.getValue());
69  return true;
70  }
71 
72  @Override
74  return new EntryComparator();
75  }
76 
77  @SuppressWarnings("unchecked")
78  @Override
79  public boolean contains(Object obj) {
80  if (obj instanceof Entry) {
81  Entry<K, V> e = (Entry<K, V>) obj;
82  return contains(e.getKey());
83  }
84  return false;
85  }
86 
87  @Override
88  public boolean isEmpty() {
89  return MapView.this.isEmpty();
90  }
91 
92  @Override
93  public Iterator<Entry<K, V>> iterator() {
94  return MapView.this.iterator();
95  }
96 
97  @Override
98  public void perform(
99  final Consumer<CollectionService<Entry<K, V>>> action,
100  final CollectionService<Entry<K, V>> view) {
102  @Override
103  public void accept(MapService<K, V> param) {
104  action.accept(view);
105  }
106  };
107  MapView.this.perform(mapAction, MapView.this);
108  }
109 
110  @Override
111  @SuppressWarnings("unchecked")
112  public boolean remove(Object obj) {
113  if (obj instanceof Entry) {
114  Entry<K, V> e = (Entry<K, V>) obj;
115  if (!contains(e.getKey())) return false;
116  MapView.this.remove(e.getKey());
117  return true;
118  }
119  return false;
120  }
121 
122  @Override
123  public int size() {
124  return MapView.this.size();
125  }
126 
127  @SuppressWarnings("unchecked")
128  @Override
130  MapService<K, V>[] subMaps = MapView.this.split(n);
131  CollectionService<Entry<K, V>>[] result = new CollectionService[subMaps.length];
132  for (int i = 0; i < result.length; i++) {
133  result[i] = subMaps[i].entrySet();
134  }
135  return result;
136  }
137 
138  @Override
139  public void update(
140  final Consumer<CollectionService<Entry<K, V>>> action,
141  final CollectionService<Entry<K, V>> view) {
143  @Override
144  public void accept(MapService<K, V> param) {
145  action.accept(view);
146  }
147  };
148  MapView.this.update(mapAction, MapView.this);
149  }
150  }
151 
153  protected class KeySet extends MappedSetImpl<Entry<K, V>, K> {
154  private static final long serialVersionUID = MapView.serialVersionUID;
155 
156  public KeySet() {
157  super(entrySet(), new Function<Entry<K, V>, K>() {
158  @Override
159  public K apply(Map.Entry<K, V> e) {
160  return e.getKey();
161  }
162  });
163 
164  }
165 
166  @Override
167  public boolean add(K key) { // Supports adding new key with null value.
168  if (containsKey(key)) return false;
169  put(key, null);
170  return true;
171  }
172 
173  @Override
175  return keyComparator();
176  }
177 
178  @SuppressWarnings("unchecked")
179  @Override
180  public boolean contains(Object obj) {
181  return containsKey((K) obj);
182  }
183 
184  @SuppressWarnings("unchecked")
185  @Override
186  public boolean remove(Object obj) {
187  if (!containsKey((K) obj)) return false;
188  MapView.this.remove((K) obj);
189  return true;
190  }
191  }
192 
194  protected class Values extends MappedCollectionImpl<Entry<K, V>, V> {
195  private static final long serialVersionUID = MapView.serialVersionUID;
196 
197  public Values() {
198  super(entrySet(), new Function<Entry<K, V>, V>() {
199  @Override
200  public V apply(Map.Entry<K, V> e) {
201  return e.getValue();
202  }
203  });
204  }
205 
206  @Override
208  return valueComparator();
209  }
210  }
211 
212  private static final long serialVersionUID = 0x600L; // Version.
214 
219  this.target = target;
220  }
221 
222  @Override
223  public void clear() {
224  Iterator<Entry<K, V>> it = iterator();
225  while (it.hasNext()) {
226  it.remove();
227  }
228  }
229 
230  @SuppressWarnings("unchecked")
231  @Override
232  public MapView<K, V> clone() {
233  try {
234  MapView<K, V> copy = (MapView<K, V>) super.clone();
235  if (target != null) { // Not a root class.
236  copy.target = target.clone();
237  }
238  return copy;
239  } catch (CloneNotSupportedException e) {
240  throw new Error("Should not happen since target is cloneable");
241  }
242  }
243 
244  @Override
245  public abstract boolean containsKey(Object key);
246 
247  @Override
248  public boolean containsValue(Object value) {
249  return values().contains(value);
250  }
251 
252  @Override
254  return new EntrySet();
255  }
256 
257  @Override
258  public abstract V get(Object key);
259 
260  @Override
261  public boolean isEmpty() {
262  return iterator().hasNext();
263  }
264 
265  @Override
266  public abstract Iterator<Entry<K, V>> iterator();
267 
268  @Override
270 
271  @Override
273  return new KeySet();
274  }
275 
276  @Override
277  public void perform(Consumer<MapService<K, V>> action, MapService<K, V> view) {
278  if (target == null) {
279  action.accept(view);
280  } else {
281  target.perform(action, view);
282  }
283  }
284 
285  @Override
286  public abstract V put(K key, V value);
287 
288  @SuppressWarnings("unchecked")
289  @Override
290  public void putAll(Map<? extends K, ? extends V> m) {
291  Iterator<?> it = m.entrySet().iterator();
292  while (it.hasNext()) {
293  Entry<K, V> e = (Entry<K, V>) it.next();
294  put(e.getKey(), e.getValue());
295  }
296  }
297 
298  @Override
299  public V putIfAbsent(K key, V value) {
300  if (!containsKey(key)) return put(key, value);
301  else return get(key);
302  }
303 
304  @Override
305  public abstract V remove(Object key);
306 
307  @Override
308  public boolean remove(Object key, Object value) {
309  if (containsKey(key) && get(key).equals(value)) {
310  remove(key);
311  return true;
312  } else return false;
313  }
314 
315  @Override
316  public V replace(K key, V value) {
317  if (containsKey(key)) {
318  return put(key, value);
319  } else return null;
320  }
321 
322  @Override
323  public boolean replace(K key, V oldValue, V newValue) {
324  if (containsKey(key) && get(key).equals(oldValue)) {
325  put(key, newValue);
326  return true;
327  } else return false;
328  }
329 
330  @Override
331  public int size() {
332  int count = 0;
333  Iterator<Entry<K, V>> it = iterator();
334  while (it.hasNext()) {
335  count++;
336  it.next();
337  }
338  return count;
339  }
340 
341  @SuppressWarnings("unchecked")
342  @Override
343  public MapService<K, V>[] split(int n) {
344  if (target == null) return new MapService[] { this }; // No split.
345  MapService<K, V>[] subTargets = target.split(n);
346  MapService<K, V>[] result = new MapService[subTargets.length];
347  for (int i = 0; i < subTargets.length; i++) {
348  MapView<K, V> copy = this.clone();
349  copy.target = subTargets[i];
350  result[i] = copy;
351  }
352  return result;
353  }
354 
355  @Override
357  return new SharedMapImpl<K, V>(this);
358  }
359 
360  @Override
361  public void update(Consumer<MapService<K, V>> action, MapService<K, V> view) {
362  if (target == null) {
363  action.accept(view);
364  } else {
365  target.update(action, view);
366  }
367  }
368 
369  @Override
371 
372  @Override
374  return new Values();
375  }
376 
378  protected MapService<K, V> target() {
379  return target;
380  }
381 
382 }
javolution.util.service.MapService.entrySet
SetService< Map.Entry< K, V > > entrySet()
javolution.util.function.Equality.areEqual
boolean areEqual(T left, T right)
javolution.util.internal.map.MapView.KeySet.serialVersionUID
static final long serialVersionUID
Definition: MapView.java:154
javolution.util.internal.map.MapView.KeySet.comparator
Equality<? super K > comparator()
Definition: MapView.java:174
javolution.util.internal.map.MapView.iterator
abstract Iterator< Entry< K, V > > iterator()
javolution
javolution.util.internal
javolution.util.internal.map.SharedMapImpl
Definition: SharedMapImpl.java:21
javolution.util.service
Definition: BitSetService.java:9
javolution.util.internal.map.MapView.KeySet
Definition: MapView.java:153
javolution.util.internal.map.MapView.EntrySet
Definition: MapView.java:60
javolution.util.internal.map.MapView.EntryComparator.EntryComparator
EntryComparator()
Definition: MapView.java:38
javolution.util.internal.map.MapView.EntrySet.isEmpty
boolean isEmpty()
Definition: MapView.java:88
javolution.util.internal.map.MapView.EntrySet.size
int size()
Definition: MapView.java:123
javolution.util.internal.map.MapView.EntrySet.update
void update(final Consumer< CollectionService< Entry< K, V >>> action, final CollectionService< Entry< K, V >> view)
Definition: MapView.java:139
javolution.util.internal.map.MapView.KeySet.add
boolean add(K key)
Definition: MapView.java:167
javolution.util.internal.map.MapView.perform
void perform(Consumer< MapService< K, V >> action, MapService< K, V > view)
Definition: MapView.java:277
javolution.util.internal.map.MapView
Definition: MapView.java:29
javolution.util.internal.map.MapView.KeySet.contains
boolean contains(Object obj)
Definition: MapView.java:180
javolution.util.internal.map.MapView.containsValue
boolean containsValue(Object value)
Definition: MapView.java:248
javolution.util.internal.map.MapView.Values
Definition: MapView.java:194
javolution.util.internal.collection.MappedCollectionImpl
Definition: MappedCollectionImpl.java:21
javolution.util.internal.collection
Definition: AtomicCollectionImpl.java:9
javolution.util.internal.set
Definition: AtomicSetImpl.java:9
javolution.util.internal.map.MapView.EntryComparator.hashCodeOf
int hashCodeOf(Entry< K, V > e)
Definition: MapView.java:54
javolution.util.internal.map.MapView.EntrySet.remove
boolean remove(Object obj)
Definition: MapView.java:112
javolution.util.internal.set.SetView
Definition: SetView.java:18
javolution.util.internal.map.MapView.Values.comparator
Equality<? super V > comparator()
Definition: MapView.java:207
javolution.util.function.Consumer
Definition: Consumer.java:22
javolution.util.service.MapService
Definition: MapService.java:27
javolution.util.internal.map.MapView.put
abstract V put(K key, V value)
javolution.util.internal.map.MapView.serialVersionUID
static final long serialVersionUID
Definition: MapView.java:212
javolution.util.internal.map.MapView.clear
void clear()
Definition: MapView.java:223
javolution.util.internal.map.MapView.Values.Values
Values()
Definition: MapView.java:197
javolution.util.service.CollectionService
Definition: CollectionService.java:25
javolution.util.internal.set.MappedSetImpl
Definition: MappedSetImpl.java:19
javolution.util.function.Equality
Definition: Equality.java:39
javolution.util.internal.map.MapView.threadSafe
MapService< K, V > threadSafe()
Definition: MapView.java:356
javolution.util.internal.map.MapView.replace
boolean replace(K key, V oldValue, V newValue)
Definition: MapView.java:323
javolution.util.internal.map.MapView.EntryComparator.serialVersionUID
static final long serialVersionUID
Definition: MapView.java:36
javolution.util.internal.map.MapView.EntryComparator.areEqual
boolean areEqual(Entry< K, V > left, Entry< K, V > right)
Definition: MapView.java:42
javolution.util.internal.map.MapView.EntrySet.split
CollectionService< Entry< K, V > >[] split(int n)
Definition: MapView.java:129
javolution.util.internal.map.MapView.EntryComparator
Definition: MapView.java:35
javolution.util.function.Consumer.accept
void accept(T param)
javolution.util.internal.map.MapView.target
MapService< K, V > target()
Definition: MapView.java:378
javolution.util.internal.map.MapView.EntrySet.EntrySet
EntrySet()
Definition: MapView.java:62
javolution.util.internal.map.MapView.MapView
MapView(MapService< K, V > target)
Definition: MapView.java:218
javolution.util.internal.map.MapView.EntrySet.serialVersionUID
static final long serialVersionUID
Definition: MapView.java:61
javolution.util.internal.map.MapView.containsKey
abstract boolean containsKey(Object key)
javolution.util.function
Definition: Consumer.java:9
javolution.util.internal.map.MapView.clone
MapView< K, V > clone()
Definition: MapView.java:232
javolution.util.internal.map.MapView.update
void update(Consumer< MapService< K, V >> action, MapService< K, V > view)
Definition: MapView.java:361
javolution.util.internal.map.MapView.entrySet
SetService< Entry< K, V > > entrySet()
Definition: MapView.java:253
javolution.util.internal.map.MapView.KeySet.KeySet
KeySet()
Definition: MapView.java:156
javolution.util.internal.map.MapView.remove
abstract V remove(Object key)
javolution.util.internal.map.MapView.values
CollectionService< V > values()
Definition: MapView.java:373
javolution.util.internal.map.MapView.EntrySet.perform
void perform(final Consumer< CollectionService< Entry< K, V >>> action, final CollectionService< Entry< K, V >> view)
Definition: MapView.java:98
javolution.util.function.Equality.compare
int compare(T left, T right)
javolution.util.internal.map.MapView.valueComparator
abstract Equality<? super V > valueComparator()
javolution.util.internal.map.MapView.Values.serialVersionUID
static final long serialVersionUID
Definition: MapView.java:195
javolution.util.internal.map.MapView.EntrySet.iterator
Iterator< Entry< K, V > > iterator()
Definition: MapView.java:93
javolution.util.internal.map.MapView.EntryComparator.compare
int compare(Entry< K, V > left, Entry< K, V > right)
Definition: MapView.java:48
javolution.util.internal.map.MapView.keySet
SetService< K > keySet()
Definition: MapView.java:272
javolution.util.function.Function
Definition: Function.java:22
javolution.util.service.SetService
Definition: SetService.java:19
javolution.util.internal.map.MapView.putIfAbsent
V putIfAbsent(K key, V value)
Definition: MapView.java:299
javolution.util.internal.map.MapView.putAll
void putAll(Map<? extends K, ? extends V > m)
Definition: MapView.java:290
javolution.util.function.Equality.hashCodeOf
int hashCodeOf(T object)
javolution.util.internal.map.MapView.split
MapService< K, V >[] split(int n)
Definition: MapView.java:343
javolution.util.internal.map.MapView.EntrySet.contains
boolean contains(Object obj)
Definition: MapView.java:79
javolution.util.internal.map.MapView.replace
V replace(K key, V value)
Definition: MapView.java:316
javolution.util.internal.map.MapView.isEmpty
boolean isEmpty()
Definition: MapView.java:261
javolution.util
Definition: FastBitSet.java:9
javolution.util.internal.map.MapView.size
int size()
Definition: MapView.java:331
javolution.util.internal.map.MapView.keyComparator
abstract Equality<? super K > keyComparator()
javolution.util.internal.map.MapView.EntrySet.add
boolean add(Entry< K, V > entry)
Definition: MapView.java:67
javolution.util.internal.map.MapView.EntrySet.comparator
Equality<? super Entry< K, V > > comparator()
Definition: MapView.java:73
javolution.util.internal.map.MapView.target
MapService< K, V > target
Definition: MapView.java:213