MATSIM
AttributesComparison.java
Go to the documentation of this file.
1 package org.matsim.utils.objectattributes.attributable;
2 
3 import com.google.common.base.Equivalence;
4 import com.google.common.collect.Maps;
5 import com.google.common.collect.Sets;
7 
8 import java.util.Map;
9 
13 public final class AttributesComparison {
14 
16 
17  public static boolean equals(Attributes a1, Attributes a2) {
18  if(a1.size() != a2.size()) {
19  return false;
20  }
21 
22  return Maps.difference(a1.getAsMap(), a2.getAsMap(), new CustomEquivalence()).areEqual();
23  }
24 
25  private static class CustomEquivalence extends Equivalence<Object> {
26  @Override
27  protected boolean doEquivalent(Object a, Object b) {
28  if (a instanceof Map<?, ?> mapA && b instanceof Map<?, ?> mapB) {
29  return Maps.difference(mapA, mapB, new CustomEquivalence()).areEqual();
30  } else if (a instanceof PersonVehicles vehiclesA && b instanceof PersonVehicles vehiclesB) {
31  return Maps.difference(vehiclesA.getModeVehicles(), vehiclesB.getModeVehicles(), new CustomEquivalence()).areEqual();
32  }
33  return a.equals(b);
34  }
35 
36  @Override
37  protected int doHash(Object o) {
38  return o.hashCode();
39  }
40  }
41 }