java - 带有函数接口的 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);
}
和空的主要课程。
解决方案
实现返回 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);
推荐阅读
- python - Pytorch Torch.save FileNotFoundError
- redis - Redis - 如何从 redis 获取最近 1 小时的数据
- php - 如何解析 websocket 数据帧
- vba - 从 Excel VBA 调用 Oracle PL SQL 函数
- react-native - react-native 全局提示用户在网络失败时启用 wifi 或蜂窝
- android - 如何修改android上的触摸屏驱动程序以获得自动快速屏幕触摸?
- android - 活动生命周期-在实际项目中使用
- apache-spark - 加入后处理 Spark 中的不良记录
- vba - 如何将数据透视表列中的所有值除以常数
- python - 在 django 中搜索不起作用