code: public List<String> decode(String path) {
      Map<String, String> match = match(path);
      if (match == null) {
        throw new IllegalArgumentException(String.format("template '%s' does not match '%s'",
            this, path));
      }
      List<String> result = Lists.newArrayList();
      for (Map.Entry<String, String> entry : match.entrySet()) {
        String key = entry.getKey();
        if (!key.startsWith("$")) {
          throw new IllegalArgumentException("template must not contain named bindings");
        }
        int i = Integer.parseInt(key.substring(1));
        while (result.size() <= i) {
          result.add("");
        }
        result.set(i,  entry.getValue());
      }
      return ImmutableList.copyOf(result);
    }
docs: Matches the template into a list of positional values. The template must not be build from
  named bindings, but only contain wildcards. For each wildcard in the template, a value is
  returned at corresponding position in the list.