# 使用`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
```

将我的问题放在评论部分。

学习愉快！