public static <T> boolean equals(Iterable<? extends T> s1, Iterable<? extends T> s2, BiFunction<? super T, ? super T, Boolean> comparator) {
    Iterator<? extends T> it2 = s2.iterator();
    for (T elem : s1) {
      if (!it2.hasNext()) {
        return false;
      }
      if (!comparator.fun(elem, it2.next())) {
        return false;
      }
    }
    return !it2.hasNext();
  }
public static <T> boolean equals(Iterable<? extends T> s1, Iterable<? extends T> s2, BiFunction<? super T, ? super T, Boolean> comparator)