Преобразование кода Java в Groovy - PullRequest
1 голос
/ 25 января 2012

Я пытаюсь преобразовать функцию 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 ]

1 голос
/ 25 января 2012

Мне кажется, что

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        
}

Inидиоматический код Groovy, многие циклы заменяются итерационными методами, такими как each()

0 голосов
/ 25 января 2012
/*The below line gives me error*/
for(it in result.document && count < 1)
{

}

В этой строке выдается ошибка, поскольку result.document будет пытаться вызвать result.getDocument(), которого не существует.

Кроме того, вам следует избегать использования it в качестве имени переменнойв Groovy, потому что в рамках замыкания it - имя по умолчанию первого параметра замыкания.

Я не посмотрел код полностью (или, как говорят дети, "tl; dr"), но я подозреваю, что если вы просто переименуете файл из .java в .groovy, он, вероятно, будет работать.

0 голосов
/ 25 января 2012

Вы знаете , в то время как оператор также существует в Groovy?

Как следствие, нет оснований превращать его в цикл for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...