将Java代码转换为Groovy

时间:2012-01-25 10:24:28

标签: java groovy

我正在尝试将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
   }

3 个答案:

答案 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,它可能会起作用。