code: public NegotiationResult negotiate() {
  		return
  			new ContentNegotiationAlgorithm(
  				this.mediaTypes.build(),
  				this.characterEncodings.build(),
  				this.languages.build(),
  				this.supported.build(),
  				this.accepts.build(),
  				this.acceptCharsets.build(),
  				this.acceptLanguages.build(),
  				this.errorVariant).
  				execute();
  	}
docs: Carry out the content negotiation taking into account both the supported
  and the acceptable media types, character encodings, and languages.
  <p>
  The method implements a simplified version of the <b>Remote Variant
  Selection Algorithm</b> defined in <a
  href="https://tools.ietf.org/html/rfc2296">RFC 2296</a>.
  <p>
  The differences between the implemented algorithm and the original one
  are the following:
  <ol>
  <li>There is no support for <i>features</i>,
  <li>Variant <i>source-quality</i> is assigned linearly (with ratio
  -0.125) of the values suggested in Section 5.3 of RFC 2296;
  <li>The <i>round5</i> function is not applied during the computation of
  overall quality values.
  </ol>
  The reason for this latter difference is that in the presence of
  fine-grained qualities (<i>i.e.</i>, 0.001) computed quality values
  converge to 10<sup>-12</sup>, and can make variants with non-zero
  computed qualities appear like they are not amenable to selection.
  
  @return the result of the content negotiation
  @see <a href="https://tools.ietf.org/html/rfc2296">RFC 2296: HTTP Remote
  Variant Selection Algorithm -- RVSA/1.0</a>