public static @NotNull <T> List<T> collectCommon(@NotNull Stream<? extends Collection<T>> groups,
                                                   Hash.@Nullable Strategy<? super T> hashingStrategy) {
    List<T> common = new ArrayList<>();
    boolean[] firstGroup = {true};

    groups.forEach(values -> {
      if (firstGroup[0]) {
        firstGroup[0] = false;
        common.addAll(values);
      }
      else {
        Set<T> c = hashingStrategy == null ? new HashSet<>(values) : new ObjectOpenCustomHashSet<>(values, hashingStrategy);
        common.retainAll(c);
      }
    });

    return common;
  }
public static @NotNull <T> List<T> collectCommon(@NotNull Stream<? extends Collection<T>> groups,
                                                   Hash.@Nullable Strategy<? super T> hashingStrategy)