/**
   * Calculate Union interest between 2 AuthorInterest
   *
   * @param eachAuthorInterest1
   * @param eachAuthorInterest2
   * @return
   */
  private AuthorInterest calculateUnionOfAuthorInterest(
      AuthorInterest eachAuthorInterest1, AuthorInterest eachAuthorInterest2) {
    AuthorInterest authorInterestResult = new AuthorInterest();
    authorInterestResult.setLanguage(eachAuthorInterest1.getLanguage());
    authorInterestResult.setYear(eachAuthorInterest1.getYear());

    Map<Interest, Double> termsWeight1 = eachAuthorInterest1.getTermWeights();
    Map<Interest, Double> termsWeight2 = eachAuthorInterest2.getTermWeights();

    Map<Interest, Double> mergedTermWeight = new HashMap<Interest, Double>();
    mergedTermWeight.putAll(termsWeight1);
    mergedTermWeight.putAll(termsWeight2);

    Map<Interest, Double> termsWeightResult = new HashMap<Interest, Double>();

    for (Map.Entry<Interest, Double> eachMergedTermWeight : mergedTermWeight.entrySet()) {
      Interest interstKey = eachMergedTermWeight.getKey();
      if (termsWeight1.get(interstKey) != null) {
        termsWeightResult.put(
            interstKey, (eachMergedTermWeight.getValue() + termsWeight1.get(interstKey)) / 2);
      } else {
        termsWeightResult.put(interstKey, eachMergedTermWeight.getValue());
      }
    }

    if (!termsWeightResult.isEmpty()) authorInterestResult.setTermWeights(termsWeightResult);

    return authorInterestResult;
  }