code: public static Map zip(Iterator keys, Iterator values, boolean includeNull) {
          HashMap hm = new HashMap();
          while (keys.hasNext() && values.hasNext()) {
              Object o = keys.next();
              Object p = values.next();
              if (includeNull || o != null && p != null) {
                  hm.put(o, p);
              }
          }
          return hm;
      }
docs: Creates a map where the object at index N from the first Iterator is the key for the object at index N of the
  second Iterator. If either Iterator is shorter than the other, the resulting Map will have only as many keys as
  are in the smallest of the two Iterator. <br> If includeNull is true, both keys and values of null are allowed.
  Note that if more than one key is null, previous entries will be overwritten.
  
  @param keys        Iterator of keys
  @param values      Iterator of values
  @param includeNull allow null values and keys
  @return map