docs: public static <T> Predicate<T> and(Predicate<? super T>... components) {
          assert null != components;
          components = components.clone();
          int n = components.length;
          for (int i = 0; i < n; ++i) {
              Predicate<? super T> p = components[i];
              if (p == ALWAYS_FALSE) {
                  return alwaysFalse();
              }
              if (p == ALWAYS_TRUE) {
                  components[i] = components[n - 1];
                  --i;
                  --n;
              }
          }
          if (n == 0) {
              return alwaysTrue();
          }
          if (n != components.length) {
              @SuppressWarnings("unchecked")
              Predicate<? super T>[] newComponents = new Predicate[n];
              System.arraycopy(newComponents, 0, components, 0, n);
              components = newComponents;
          }
          return new AndPredicate<T>(components);
      }