我正在尝试将Java函数转换为等效的Groovy代码,但我无法在循环中找到任何执行&&
操作的内容。任何人都可以指导我......
到目前为止,这是我得到的
public List getAlert(def searchParameters, def numOfResult) throws UnsupportedEncodingException
{
List respList=null
respList = new ArrayList()
String[] searchStrings = searchParameters.split(",")
try
{
for(strIndex in searchStrings)
{
IQueryResult result = search(searchStrings[strIndex])
if(result!=null)
{
def count = 0
/*The below line gives me error*/
for(it in result.document && count < numOfResult)
{
}
}
}
}
catch(Exception e)
{
e.printStackTrace()
}
}
我的Java代码
public List getAlert(String searchParameters, int numOfResult) throws UnsupportedEncodingException
{
List respList = null
respList = new ArrayList()
String[] searchStrings = searchParameters.split(",")
try {
for (int strIndex = 0; strIndex < searchStrings.length; strIndex++) {
IQueryResult result = search(searchStrings[strIndex])
if (result != null) {
ListIterator it = result.documents()
int count = 0
while ((it.hasNext()) && (count < numOfResult)) {
IDocumentSummary summary = (IDocumentSummary)it.next()
if (summary != null) {
String docid = summary.getSummaryField("infadocid").getStringValue()
int index = docid.indexOf("#")
docid = docid.substring(index + 1)
String url = summary.getSummaryField("url").getStringValue()
int i = url.indexOf("/", 8)
String endURL = url.substring(i + 1, url.length())
String body = summary.getSummaryField("infadocumenttitle").getStringValue()
String frontURL = produrl + endURL
String strURL
strURL = frontURL
strURL = body
String strDocId
strDocId = frontURL
strDocId = docid
count++
}
}
}
result = null
}
} catch (Exception e) {
e.printStackTrace()
return respList
}
return respList
}
答案 0 :(得分:1)
在我看来似乎
def summary = result.documents.first()
if (summary) {
String docid = summary.getSummaryField("infadocid").getStringValue()
...
strDocId = docid
}
是你真正需要的,因为当你想要的只是处理第一条记录时,for循环实际上没有多大意义。
如果result.documents可能包含null
s,则将first()
替换为find()
编辑:处理多个结果:
def summaries = result.documents.take(numOfResult)
// above code assumes result.documents contains no nulls; otherwise:
// def count=0
// def summaries = result.documents.findAll { it && count++<numOfResult }
summaries.each { summary ->
String docid = summary.getSummaryField("infadocid").getStringValue()
...
strDocId = docid
}
在惯用的Groovy代码中,许多循环被迭代方法替换为each()
答案 1 :(得分:0)
你知道Groovy中也存在while statement吗?
因此,没有理由将其转换为for循环。
答案 2 :(得分:0)
/*The below line gives me error*/
for(it in result.document && count < 1)
{
}
此行显示错误,因为result.document
会尝试调用不存在的result.getDocument()
。
此外,您应该避免在Groovy中使用it
作为变量名,因为在闭包范围内it
是第一个闭包参数的默认名称。
我没有彻底查看代码(或者像孩子们说的那样,“tl; dr”),但我怀疑如果你只是将文件从.java重命名为.groovy,它可能会起作用。