code: public <R> R forThose(RFunc2<Boolean, K, V> predicate, def<R> func) {
                  Iterator<K> it = map.keySet().iterator();
                  IteratorInfo<R> info = new IteratorInfo<>();
                  ptr<Integer> i = Style.ptr(0);
                  return Style.While(it::hasNext, (loopInfo) -> {
                          K k = it.next();
                          V v = map.get(k);
                          try {
                                  return If(predicate.apply(k, v), () -> {
                                          return func.apply(k, v, info.setValues(i.item - 1, i.item + 1, i.item != 0, it.hasNext(),
                                                  loopInfo.currentIndex, loopInfo.effectiveIndex, loopInfo.lastRes));
                                  }).Else(() -> null);
                          } catch (Throwable err) {
                                  StyleRuntimeException sErr = Style.$(err);
                                  Throwable t = sErr.origin();
                                  if (t instanceof Remove) {
                                          it.remove();
                                  } else {
                                          throw sErr;
                                  }
                          } finally {
                                  i.item += 1;
                          }
                          return null;
                  }
docs: define a function to deal with each element in the map
  
  @param predicate a function takes in each element from map and returns
  true or false(or null)
  @param func      a function returns 'last loop result'
  @return return 'last loop value'.<br>
  check
  <a href="https://github.com/wkgcass/Style/">tutorial</a> for
  more info about 'last loop value'
  @see IteratorInfo