predicate instead of boolean
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java
index 9f4a566..fd10636 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java
@@ -25,6 +25,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.function.Predicate;
 
 import jakarta.ws.rs.core.Configuration;
 import jakarta.ws.rs.core.Cookie;
@@ -200,15 +201,14 @@
      * class or using its {@code toString} method if a header delegate is not available.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get message date.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java
index f9f2549..6482152 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java
@@ -22,6 +22,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import jakarta.ws.rs.core.EntityTag;
 import jakarta.ws.rs.core.Link;
@@ -92,15 +93,14 @@
      * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get the allowed HTTP methods from the Allow HTTP header.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java
index c1efb79..36056f3 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.function.Predicate;
 
 import jakarta.ws.rs.core.Cookie;
 import jakarta.ws.rs.core.MediaType;
@@ -232,15 +233,14 @@
      * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get message date.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java
index 40f3e29..186ef4e 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java
@@ -24,6 +24,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import jakarta.ws.rs.core.EntityTag;
 import jakarta.ws.rs.core.Link;
@@ -122,15 +123,14 @@
      * class or using its {@code toString} method if a header delegate is not available.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get the allowed HTTP methods from the Allow HTTP header.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
index 7233a1c..8a4c0cc 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
@@ -20,6 +20,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.function.Predicate;
 
 /**
  * An injectable interface that provides access to HTTP header information. All methods throw
@@ -68,15 +69,14 @@
      * class or using its {@code toString} method if a header delegate is not available.
      *
      * @param name the message header.
-     * @param value the message header value.
-     * @param ignoreCase whether to ignore upper/lower case.
+     * @param valuePredicate value must fulfil this predicate.
      * @return {@code true} if and only if a header with the provided name exists having either the exact value or whose
      * comma-separated header string contains value as a whole word.
      * @see #getRequestHeaders()
      * @see #getHeaderString(String)
      * @since 4.0
      */
-    public boolean containsHeaderString(String name, String value, boolean ignoreCase);
+    public boolean containsHeaderString(String name, Predicate<String> valuePredicate);
 
     /**
      * Get the values of HTTP request headers. The returned Map is case-insensitive wrt. keys and is read-only. The method