code: public static <T> Predicate<T> create(Predicate<? super T> p, String string)
      {
          Objects.requireNonNull(p);
          return new Predicate<T>()
          {
              @Override
              public boolean test(T t)
              {
                  return p.test(t);
              }
              
              @Override
              public Predicate<T> and(Predicate<? super T> other) 
              {
                  return Predicates.and(this, other);
              }
  
              @Override
              public Predicate<T> negate() 
              {
                  return Predicates.negate(this);
              }
  
              @Override
              public Predicate<T> or(Predicate<? super T> other) 
              {
                  return Predicates.or(this, other);
              }
              
              @Override
              public String toString()
              {
                  return string;
              }
          };
      }
docs: Create a <code>Predicate</code> with the given string representation,
  that has its <code>and</code>, <code>or</code> and <code>negate</code>
  methods implemented by delegating to the methods of this class.
  
  @param p The input predicate. May not be <code>null</code>.
  @param string The string representation of the predicate
  @return The predicate