code: public static Map<String, String> data(Map<String, String[]> params, Map.Entry<String, String>... others) {
          Map<String, String> result = new HashMap<>();
          // expand params
          for(Map.Entry<String, String[]> entry : params.entrySet()) {
              if (entry.getValue() == null || entry.getValue().length == 0)
                  continue;
              else if (entry.getValue().length == 1 && ! entry.getKey().endsWith("[]"))
                  result.put(entry.getKey(), entry.getValue()[0]);
              else {
                  for(int i = 0; i < entry.getValue().length; i++) {
                      String key = entry.getKey().replaceAll("\\[\\]$", "") + "[" + i + "]";
                      result.put(key, entry.getValue()[i]);
                  }
              }
          }
          // merge in others
          for(Map.Entry<String, String> entry : others) {
              result.put(entry.getKey(), entry.getValue());
          }
          return result;
      }
docs: create data map from a map (name -* value array) and other params
  @param params params of type of Map(String -* String[])
  @param others other params
  @return new created data map