Java 带有函数接口的 Lambda

Java Lambda with function interface

我是 java 的新手,正在处理具有以下要求的 lambda 函数。有人可以帮我弄这个吗。 使用以下方法创建 public class ValidateUtility :

public static Validate validateEmployeeName() – validateName 方法的 lambda 表达式必须 return 如果名称有效则为真,如果名称无效则 return 为假。

在这种情况下,如果名称包含字母和 space,则该名称有效,并且应至少包含 5 个字符,最多 20 个字符。

public static Validate validateProductName() – validateName 方法的 lambda 表达式必须 return 如果名称有效则为真,如果名称无效则 return 为假。

在这种情况下,如果第一个字符是字母后跟 5 个数字,则名称有效。

给定的功能接口

 public interface Validate{
    //write the abstract method 
    public boolean validateName(String name);
}

和空主class。

实现return lambda 表达式(或匿名方法)作为验证器的静态方法的一种方法如下。此实现使用 Regex,但可以更改为任何其他实现。

public class ValidateUtility {

    @FunctionalInterface
    public interface Validate {
        public boolean validateName(String name);
    }

    /**
     * Validates a given string (employee name) using
     * 
     * @return true if the string contains alphabets [a-zA-Z] and (white) space(s),
     *         and has atleast 5 and atmost 20 characters, and false otherwise.
     */
    public static Validate validateEmployeeName() {
        return employeeName -> employeeName.matches("[a-zA-Z\s]{5,20}");
    }

    /**
     * Validates a given string (product name) using *
     * 
     * @return true if the string contains an alphabet [a-zA-Z] followed by 5 digits
     *         [0-9], and false otherwise.
     */
    public static Validate validateProductName() {
        return productName -> productName.matches("[a-zA-Z]{1}[\d]{5}");
    }

    public static void main(String[] args) {
        boolean isValidEmployeeName = ValidateUtility.validateEmployeeName().validateName("Bla Bla");
        System.out.println(isValidEmployeeName);

        boolean isValidProductName = ValidateUtility.validateProductName().validateName("X12345");
        System.out.println(isValidProductName);
    } }

但是,最好使用 Java 已经提供的合适的功能接口,在这种情况下 Predicate 可以按如下方式实现。

    final Predicate<String> employeeNameValidatorPredicate = 
        employeeName -> employeeName.matches("[a-zA-Z\s]{5,20}");
    
    final Predicate<String> productNameValidatorPredicate = 
        productName -> productName.matches("[a-zA-Z]{1}[\d]{5}");

    boolean isValidEmployeeName = employeeNameValidatorPredicate.test("Bla Bla");
    System.out.println(isValidEmployeeName);

    boolean isValidProductName = productNameValidatorPredicate.test("X12345");
    System.out.println(isValidProductName);