public HashMap<CoordinatePair, Integer> analyzeNoString(CoreLog log) {
    HashMap<CoordinatePair, Integer> sentMessages = new HashMap<>();

    for (int i = 0; i < log.logSize(); i++) {
      LogEntry entry = log.getEntry(i);

      Coordinate sourceCoord = new Coordinate(entry.sourceX(), entry.sourceY());
      Coordinate destCoord = new Coordinate(entry.destX(), entry.destY());
      CoordinatePair pair = coordinatePairEquivalence(sourceCoord, destCoord);

      // If the key already exists update the value, timesOccured
      // otherwise put a new entry in for the key
      if (sentMessages.containsKey(pair)) {
        int timesOccured = sentMessages.remove(pair);
        sentMessages.put(pair, ++timesOccured);
      } else {
        sentMessages.put(pair, 1);
      }
    }
    return sentMessages;
  }
  @Override
  public String analyze(CoreLog log) {
    HashMap<CoordinatePair, Integer> sentMessages = new HashMap<>();

    for (int i = 0; i < log.logSize(); i++) {
      LogEntry entry = log.getEntry(i);

      Coordinate sourceCoord = new Coordinate(entry.sourceX(), entry.sourceY());
      Coordinate destCoord = new Coordinate(entry.destX(), entry.destY());
      CoordinatePair pair = coordinatePairEquivalence(sourceCoord, destCoord);

      // If the key already exists update the value, timesOccured
      // otherwise put a new entry in for the key
      if (sentMessages.containsKey(pair)) {
        int timesOccured = sentMessages.remove(pair);
        sentMessages.put(pair, ++timesOccured);
      } else {
        sentMessages.put(pair, 1);
      }
    }
    List<Map.Entry<CoordinatePair, Integer>> sortedList =
        SortingHelper.SortHashMapByValue(sentMessages); // analyze sentMessages
    return sortMapEntriesByDescendingValue(sortedList);
  }