Interface Predicate của gói java.util.function có thể dùng làm target cho lambda expression. Phương thức test của interface này chấp nhận một giá trị và validate với giá trị hiện tại của Predicate. Trả về true nếu khớp, ngược lại false.
Phương thức asPredicate() của lớp java.util.regex.Pattern trả về một đối tượng Predicate có thể khớp chuỗi với biểu thức chính quy dùng để biên dịch Pattern hiện tại.
Ví dụ 1: Kiểm tra chuỗi có chứa chữ 't' (case-insensitive)
import java.util.Scanner;
import java.util.function.Predicate;
import java.util.regex.Pattern;
public class AsPredicateExample {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Nhập chuỗi đầu vào");
String input = sc.nextLine();
// Regex tìm chữ 't'
String regex = "[t]";
// Biên dịch với flag CASE_INSENSITIVE
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
// Chuyển regex thành Predicate
Predicate<String> predicate = pattern.asPredicate();
// Test predicate với chuỗi đầu vào
boolean result = predicate.test(input);
if (result) {
System.out.println("Tìm thấy khớp");
} else {
System.out.print("Không tìm thấy khớp");
}
}
}
Kết quả
Nhập chuỗi đầu vào: Tutorialspoint Tìm thấy khớp
Ví dụ 2: Lọc danh sách chuỗi bằng Predicate
import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.Predicate;
import java.util.regex.Pattern;
public class AsPredicateExample {
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();
list.addAll(Arrays.asList("Java", "JavaFX", "Hbase", "JavaScript"));
// Regex tìm chữ 'J'
String regex = "[J]";
Pattern pattern = Pattern.compile(regex);
// Chuyển thành Predicate
Predicate<String> predicate = pattern.asPredicate();
// Lọc và in
list.forEach(n -> {
if (predicate.test(n))
System.out.println("Tìm thấy khớp " + n);
});
}
}
Kết quả
Tìm thấy khớp Java Tìm thấy khớp JavaFX Tìm thấy khớp JavaScript
Ứng dụng: asPredicate() cho phép dùng regex như một Predicate<String> trong Stream API, filter(), lambda, v.v.