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