code: public static Optional<CuriTemplate> matchingCuriTemplateFor(final List<Link> curies, final String rel) {
          return curies
                  .stream()
                  .map(CuriTemplate::curiTemplateFor)
                  .filter(t->t.isMatching(rel))
                  .findAny();
      }
docs: Returns an optional CuriTemplate that is {@link #isMatching matching} the rel parameter, or empty if no matching CURI is found.
  
  <p>
  Example:
  </p>
  <pre><code>
  List&lt;Link&gt; curies = asList(
  Link.curi("x", "http://example.org/rels/{rel}"),
  Link.curi("y", "http://example.com/link-relations/{rel}")
  );
  String rel = "y:example";
  CuriTemplate template = CuriTemplate.matchingCuriTemplateFor(curies, rel);
  </code></pre>
  <p>
  The returned UriTemplate is created from the second CURI, as only this is matching the curied rel parameter
  {@code y:example}. Because of this, {@link #expandedRelFrom(String) template.expandedRelFrom(rel)} will
  return {@code http://example.com/link-relations/example}
  </p>
  @param curies a List of curies Links
  @param rel the link-relation type to check against the curies
  @return optional CuriTemplate
  @throws IllegalArgumentException if the {@code curies} parameter contains non-CURI links.
  @since 2.0.0