2012-01-25 3 views
1

Java関数を同等のGroovyコードに変換しようとしていますが、ループ内で&&操作を実行できないものは見つかりません。誰もが..JavaコードをGroovyに変換する

を通して私を導くことができる

def summary = result.documents.first() 
if (summary) { 
      String docid = summary.getSummaryField("infadocid").getStringValue() 
      ... 
      strDocId = docid   
} 

は、すべてのあなたですのようなこれまでのところ、これは私が

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 
    } 

答えて

2

得たものそれは私には思われます本当に必要です。なぜなら、forループは、最初のレコードを処理することがすべて必要なときには意味がありませんからです。

result.documentsがfind()

編集でfirst()を置き換え、その後、null Sが含まれている可能性がある場合:複数の結果を処理するには、次の慣用的なGroovyのコードでは

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   
} 

は、多くのループがありますeach()

+0

申し訳ありません...それは私の間違いだった...実際には '数 Ricky

+0

です本当にありがとうございました、コードは10%に私は' it'内部クロージャを使用しています:) – Ricky

0

Groovyにはwhile statementもありますか?

結果として、それをforループに変換する理由はありません。

1
/*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

感謝を減らしています。また、私はすでに.javaを.gavaに変換して実行しています。それはうまく動作します。しかし、私が変換を要求した理由は、私が聞いたことで、groovyが多くの行を消滅させるのを見たことです:) – Ricky

+0

よく書かれたGroovyコード通常は同等のJavaコードより約50%短くなりますが、ひどく書かれたGroovyはよく書かれたJavaよりも長くなる可能性があります。 –

関連する問題