多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 使用`Pattern.compile()`方法将 Java 正则表达式作为谓词 > 原文: [https://howtodoinjava.com/java8/regex-predicate-using-pattern-compile/](https://howtodoinjava.com/java8/regex-predicate-using-pattern-compile/) 学习将[正则表达式](//howtodoinjava.com/java-regular-expression-tutorials/)编译为[`java.util.function.Predicate`](https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html)。 当您要对匹配的标记执行某些操作时,此特性很有用。 ## 将正则表达式转换为谓词 我有不同域的电子邮件列表,我只想对域名为`example.com`的电子邮件 ID 执行某些操作。 现在使用[`Pattern.compile().asPredicate()`](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#asPredicate--)方法从编译的正则表达式中获取[谓词](//howtodoinjava.com/java8/how-to-use-predicate-in-java-8/)。 该谓词可与 lambda 流一起使用,以将其应用于每个标记中。 ```java 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); } } ``` 输出: ```java alex@example.com david@example.com ``` ## 使用`Pattern.matcher()`使用正则表达式 如果要使用旧的[`Pattern.matcher()`](//howtodoinjava.com/regex/java-regex-validate-email-address/),请使用以下代码模板。 ```java 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: ```java alex@example.com david@example.com ``` 将我的问题放在评论部分。 学习愉快!