我不确定它是否可行,但我希望在多行字符串中添加一个循环,在每个循环中生成另一个多行字符串。
String body = """\
Total Invoice Amount: £${totalInvAmt}
${quantities.each { qty ->
Offer offer = Offer.findByShoppingItem(qty.shoppingItem)
def itemDetails = """\
Name: ${offer.itemName}
Qty: $qty.value"""
itemDetails
}}
"""
闭包将循环遍历项目列表,并为每个项目连接多字符串。所有这些产生的是
Total Invoice Amount: £1100
[100, 100]
提前感谢您提供任何帮助
答案 0 :(得分:1)
这是伪代码,可以更接近你想要的东西,delta我不打算在没有SSCCE的情况下重现你的数据结构等。
Nutshell:each
迭代,您想要collect
。
body = """
Total Invoice Amount: £${totalInvAmt}
${quantities.collect { qty ->
offer = Offer.findByShoppingItem(qty.shoppingItem)
"""
Name: ${offer.itemName}
Qty: ${qty.value}
"""
}.join('\n')}
"""
我敦促你永远不要做这样的事情;这是辱骂。内部字符串生成至少应该以自己的方法处理,而不是楔入另一个字符串的中间。这很难阅读和维护。
答案 1 :(得分:0)
您可以使用模板引擎。
import groovy.text.GStringTemplateEngine
def music = [:]
music.Riverside = ['Second Life Syndrome', 'Anno Domini High Definition']
music.Beardfish = ['Destined Solitare', 'Mammoth']
def templateText = '''
Number Of Artists: ${music.size()}.
<% music.each { artist, albums -> %>\
Artist Name: ${artist}
<% albums.each { albumTitle -> %>\
Album Title: ${albumTitle}
<% } %>
<% } %>
'''
def engine = new GStringTemplateEngine()
def template = engine.createTemplate(templateText).make(music:music)
println template.toString()
这将产生如下输出:
Number Of Artists: 2.
Artist Name: Riverside
Album Title: Second Life Syndrome
Album Title: Anno Domini High Definition
Artist Name: Beardfish
Album Title: Destined Solitare
Album Title: Mammoth
您有多种选择,并且在如何将它们组合在一起时具有很大的灵活性。有关详细信息,请参阅http://beta.groovy-lang.org/templating.html。
我希望有所帮助。