[英]How to convert lambda function in java to kotlin when there is one method in interface?
[英]Java Lambda with function interface
我是 java 的新手,並且正在使用具有以下要求的 lambda 功能。 有人可以幫我弄這個嗎。 使用以下方法創建公共 class 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);
}
並空主class。
一種實現 static 方法作為驗證器返回 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.