a whole bunch of stuff
[ephemerata.git] / KezvhLib / src-lib / net / kezvh / collections / MapValuesEquivalence.java
blob3ebd379ea0f6552dcadb191ed4695c3c386b20a7
1 package net.kezvh.collections;
3 import java.util.Map;
4 import java.util.Map.Entry;
6 import net.kezvh.functional.lambda.EquivalenceRelation;
8 /**
9 * @author afflux
10 * @param <K> FIXME comment
11 * @param <V> FIXME comment
13 public final class MapValuesEquivalence<K, V> implements EquivalenceRelation<Map<K, V>> {
14 /**
17 public static final MapValuesEquivalence<?, ?> VALUES_EQUAL_EQUIVALATOR = new MapValuesEquivalence<Object, Object>();
19 private final EquivalenceRelation<V> valuesEquivalator;
21 /**
24 @SuppressWarnings("unchecked")
25 public MapValuesEquivalence() {
26 this((EquivalenceRelation<V>) EquivalenceRelation.EQUALS);
29 /**
30 * @param valuesEquivalator FIXME comment
32 public MapValuesEquivalence(final EquivalenceRelation<V> valuesEquivalator) {
33 this.valuesEquivalator = valuesEquivalator;
36 /**
37 * @param param1 FIXME comment
38 * @param param2 FIXME comment
39 * @return x
41 public Boolean op(final Map<K, V> param1, final Map<K, V> param2) {
42 if (param1 == null)
43 return param2 == null;
44 if (param2 == null)
45 return false;
47 if (!param1.keySet().equals(param2.keySet()))
48 return false;
50 return this.valuesEqual(param1, param2);
53 private boolean valuesEqual(final Map<K, V> m1, final Map<K, V> m2) {
54 for (final Entry<K, V> entry : m1.entrySet()) {
55 final K key = entry.getKey();
56 final V value1 = entry.getValue();
57 final V value2 = m2.get(key);
59 if (!this.valuesEquivalator.op(value1, value2))
60 return false;
63 return true;