首页 > 解决方案 > 带有函数接口的 Java Lambda

问题描述

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

public static Validate validateEmployeeName() – 如果名称有效,则 validateName 方法的 lambda 表达式必须返回 true,如果名称无效,则返回 false。

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

public static Validate validateProductName() – 如果名称有效,则 validateName 方法的 lambda 表达式必须返回 true,如果名称无效,则返回 false。

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

给定功能接口

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

和空的主要课程。

标签: javalambdafunctional-interface

解决方案


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

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);

推荐阅读