code: public static String getNormalizedConstraints(Constraints constraints) {
      // the constraints map isn't naturally ordered
      // we want to ensure that our output is
  
      if (constraints.isUnbounded()) {
        // unbounded constrains is a special case, here we just use
        // "unbounded" as the constraint
        return UNBOUNDED_CONSTRAINT;
      }
  
      Map<String, String> orderedConstraints = constraints.toNormalizedQueryMap();
  
      List<String> parts = new ArrayList<String>();
      // build a query portion of the URI
      for (Map.Entry<String, String> entry : orderedConstraints.entrySet()) {
        StringBuilder builder = new StringBuilder();
        String key = entry.getKey();
        String value = entry.getValue();
        builder.append(key);
        builder.append("=");
        if (value != null) {
          builder.append(value);
        }
        parts.add(builder.toString());
      }
  
      return Joiner.on('&').join(parts);
    }
docs: Get a normalized query string for the {@link Constraints} that identifies a
  logical {@code View}.
  
  The normalized constraints will match to the query portion of a URI that will
  be exactly the same as another logically equivalent URI.
  (where, for example, the query parameters may be re-ordered)
  
  If the constraints are {@link Constraints#isUnbounded() unbounded} a special case
  of "unbounded" will be returned.
  
  @return a normalized query string for the specified constraints.
  
  @since 1.1