Man*_*nie 3 groovy closures functional-programming
我在字符串中有n个随机标记,我想使用闭包来用方法的返回值替换每个值.
例如
String theString ="嗨,这是\ $ randomEmail,这是一个rand字符串:\ $ randomString,这是一个随机的\ $ randomTelephoneNumber"
那么我想做的是调用基于roke的每个适用方法来用实际值替换该字符串 - 例如对于电子邮件地址令牌($ randomEmail)然后我想调用以下方法;
String randomEmailAddress() {
return new StringBuilder(RandomStringUtils.random(6)).append("@").append(RandomStringUtils.random(6)).append(".com").toString();
}
Run Code Online (Sandbox Code Playgroud)
希望使用闭包字符串替换功能,但有点卡在接下来的步骤..
Map<String,Closure> randomStrings = [randomEmail:{randomEmailAddress()},randomUserName:{randomString(8),randomTelephoneNumber:{randPhoneNumber()}}]
Run Code Online (Sandbox Code Playgroud)
然后调用字符串上的replace函数,并依次用正确的随机值替换每个标记.
注意:我需要操作许多基本字符串(该示例仅显示其中一个)并且我可能或可能没有任何时候在映射(模型)中的文件中存在的所有值.
我知道我可以用if语句做到这一点,但却打破了学习闭包的目的:-).
提前致谢,
伊恩.
您可以使用Groovy模板:
import groovy.text.SimpleTemplateEngine
// single quotes are important here, this needs to be a string, not a gstring.
String template = 'Hi, this is $randomEmail and this is a random username: $randomUserName'
Map model = [
randomEmail: { -> randomEmailAddress() },
randomUserName: { -> randomUserName() }
]
String result = new SimpleTemplateEngine().createTemplate(template)
.make(model).toString()
Run Code Online (Sandbox Code Playgroud)