code: private Map<String, Object> collectClaims(String subject, String[] claimNames, String[] claimLocales)
      {
          // If no claim is required.
          if (claimNames == null || claimNames.length == 0)
          {
              return null;
          }
  
          // Drop empty and duplicate entries from claimLocales.
          claimLocales = normalizeClaimLocales(claimLocales);
  
          // Claim values.
          Map<String, Object> claims = new HashMap<String, Object>();
  
          // For each requested claim.
          for (String claimName : claimNames)
          {
              // If the claim name is empty.
              if (claimName == null || claimName.length() == 0)
              {
                  continue;
              }
  
              // Split the claim name into the name part and the tag part.
              String[] elements = claimName.split("#", 2);
              String name = elements[0];
              String tag  = (elements.length == 2) ? elements[1] : null;
  
              // If the name part is empty.
              if (name == null || name.length() == 0)
              {
                  continue;
              }
  
              // Get the claim value of the claim.
              Object value = getClaim(name, tag, claimLocales);
  
              // If the claim value was not obtained.
              if (value == null)
              {
                  continue;
              }
  
              if (tag == null)
              {
                  // Just for an edge case where claimName ends with "#".
                  claimName = name;
              }
  
              // Add the pair of the claim name and the claim value.
              claims.put(claimName, value);
          }
  
          // If no claim value has been obtained.
          if (claims.size() == 0)
          {
              return null;
          }
  
          // Obtained claim values.
          return claims;
      }
docs: Collect claims of the end-user.