docs: public static <K, E> Map<K, List<E>> groupBy(final Iterable<E> iterable, final Function<E, K> func) {
          final Map<K, List<E>> retVal = newLinkedHashMap();
          for (E e : iterable) {
              final K key = func.apply(e);
              List<E> val;
              if (retVal.containsKey(key)) {
                  val = retVal.get(key);
              } else {
                  val = newArrayList();
              }
              val.add(e);
              retVal.put(key, val);
          }
          return retVal;
      }