Learn to compile regular expression into java.util.function.Predicate. This can be useful when you want to perform some operation on matched tokens.
Convert Regex to Predicate
I have list of emails with different domain and I want to perform some operation only on email ids with domain name “example.com”.
Now use Pattern.compile().asPredicate()
method to get a predicate from compiled regular expression. This predicate can be used with lambda streams to apply it on each token into stream.
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Collectors; public class RegexPredicateExample { public static void main(String[] args) { // Compile regex as predicate Predicate<String> emailFilter = Pattern .compile("^(.+)@example.com$") .asPredicate(); // Input list List<String> emails = Arrays.asList("alex@example.com", "bob@yahoo.com", "cat@google.com", "david@example.com"); // Apply predicate filter List<String> desiredEmails = emails .stream() .filter(emailFilter) .collect(Collectors.<String>toList()); // Now perform desired operation desiredEmails.forEach(System.out::println); } }
Output:
alex@example.com david@example.com
Using Regex using Pattern.matcher()
If you want to use good old Pattern.matcher(), then use below code template.
public static void main(String[] args) { Pattern pattern = Pattern.compile("^(.+)@example.com$"); // Input list List<String> emails = Arrays.asList("alex@example.com", "bob@yahoo.com", "cat@google.com", "david@example.com"); for(String email : emails) { Matcher matcher = pattern.matcher(email); if(matcher.matches()) { System.out.println(email); } } }
Output:
alex@example.com david@example.com
Drop me your questions in comments section.
Happy Learning !!