2016-07-14 7 views
-2

次のコードは、私のプロジェクトで検索列を作成する予定です。しかし、私は非常に長いので、コードの効率性に疑問を持っています。コードの行数を減らしてコードに関するタスクを実行する方法はありますか?Javaソースコードを短く

package kelas_java; 
public class searchingDariSemuaKolom { 

public static void main(String[] args) { 
    BasicDBObject sortOrder = new BasicDBObject(); 
    MongoClient mongoClient; 
    DB db; 

    DBCollection table, table2; 
    DBCursor cur = null, cur2 = null; 
    try { 
     mongoClient = new MongoClient("localhost", 27017); 
     db = mongoClient.getDB("face"); 
     boolean auth = db.authenticate("aku", "kamu".toCharArray()); 
     Pattern regex = Pattern.compile("1"); 
//start1 
table = db.getCollection("titles"); 
     DBObject clause1 = new BasicDBObject("link", regex); 
     DBObject clause2 = new BasicDBObject("title", regex); 
     DBObject clause3 = new BasicDBObject("body", regex); 
     DBObject clause4 = new BasicDBObject("date", regex); 
     BasicDBList or1 = new BasicDBList(); 
     or1.add(clause1); 
     or1.add(clause2); 
     or1.add(clause3); 
     or1.add(clause4); 
     DBObject query = new BasicDBObject("$or", or1); 
     cur = table.find(query); 
     while (cur.hasNext()) { 
      System.out.println(cur.next().get("title")); 
     } 
//end1 
//start2 
table2 = db.getCollection("news"); 
     DBObject clause5 = new BasicDBObject("link", regex); 
     DBObject clause6 = new BasicDBObject("title", regex); 
     DBObject clause7 = new BasicDBObject("body", regex); 
     DBObject clause8 = new BasicDBObject("date", regex); 
     BasicDBList or2 = new BasicDBList(); 
     or2.add(clause1); 
     or2.add(clause2); 
     or2.add(clause3); 
     or2.add(clause4); 
     DBObject query2 = new BasicDBObject("$or", or2); 
     cur2 = table2.find(query2); 
     while (cur2.hasNext()) { 
      System.out.println(cur2.next().get("title")); 
     } 
//end2 
} catch (Exception ex) { 

    } finally { 
     cur.close(); 
     cur2.close(); 
    } 
} 
} 

答えて

1

コードを短縮する方法を常に使用します。同じ作業を何度もやる必要があるときは、メソッドを呼び出して真の引数を渡すだけです。

ここであなたのコードにいくつかの変更があります。私はあなたの反復コードをデータベースからいくつかのデータを印刷していましたが削除しました。そして、私はdoPrintという4つの引数を取るメソッドを作成しました。

  • 文字列の名前付きキーは、値がBasicDBObjectに割り当てられます。
  • BasicDBObjectの値に割り当てられます。
  • あなたが接続しているデータベース。
  • と、そこからデータを読み込むコレクション(テーブル)の名前。

、あなたが印刷に必要なのはdoPrint

doPrint(keys , regex , db , "titles"); 

を呼び出すことであることができます願っています。

package kelas_java; 
public class searchingDariSemuaKolom { 

    static void doPrint(String keys, Object value, DB db, String collectionName) { 
     BasicDBList or = new BasicDBList(); 
     for (String key : keys) { 
      or.add(new BasicDBObject(key, value)); 
     } 
     DBObject query = new BasicDBObject("$or", or); 
     DBCollection table = db.getCollection(collectionName); 

     try { 
      DBCursor cur = table.find(query); 
      while (cur.hasNext()) { 
       System.out.println(cur.next().get("title")); 
      } 
     } catch (MongoException e) { 
      System.out.println("Error: "+e.getMessage()); 
     } finally { 
      cur.close(); 
     } 
    } 
    public static void main(String[] args) { 
     BasicDBObject sortOrder = new BasicDBObject(); 
     MongoClient mongoClient; 
     DB db; 

     String strs[] = { 
      "link", 
      "title", 
      "body", 
      "date", 
     }; 
     try { 
      mongoClient = new MongoClient("localhost", 27017); 
      db = mongoClient.getDB("face"); 
      boolean auth = db.authenticate("aku", "kamu".toCharArray()); 
      Pattern regex = Pattern.compile("1"); 

      //start1 
      doPrint(keys , regex , db , "titles"); 
      //start2 
      doPrint(keys , regex , db , "news"); 
     } catch (Exception e) { 
      System.out.println("Error: "+e.getMessage()); 
     } 
    } 
} 
+0

おかげで、私はこの方法を使用することについて理解 ...あなたはたくさんお世話になった、それは大成功、チームメイト、私はそれが私の喜び、幸運仲間だ – beboy

+0

:)前よりも短縮コードを作ってみることはありません。 –

1

編集:Rahmatはそれに私を打つが、私は同様にポストかもしれないと思った。

問題は効率よりも長くなります。

予測できない理由がある場合は、試してみてください。そして、あなたのコードのすべてではなく、失敗するかもしれない行だけを入れてください。次に、 'catch'に、予想されるエラーとそれについて何をしたいかを指定します。

ファイルを読み込んで、内部の情報を分析するなどの操作は、キャッチの後に行われます。

私は個人的には、2回以上使用されていないか、わかりやすくするために追加の変数を作成しないことをお勧めします。しかし、それはあなた次第です。

また、sortOrderを使用したこともありません。クラス名は大文字で入力する必要があります。

package kelas_java; 
public class SearchingDariSemuaKolom { 

    public static void main(String[] args) { 

     // Not sure which of these need to be in here 
     try { 
      MongoClient mongoClient = new MongoClient("localhost", 27017); 
      DB db = mongoClient.getDB("face"); 
      boolean auth = db.authenticate("aku", "kamu".toCharArray()); 
     } catch (Exception ex) { 
      System.out.println("Error: " + ex.getMessage()); 
     } 

     Pattern regex = Pattern.compile("1"); 

     String[] stuffToAdd = {"link", "title", "body", "date"}; 

     BasicDBList or1 = method2(db, "titles", stuffToAdd); 
     BasicDBList or2 = method2(db, "news", stuffToAdd); 
    } 

    public BasicDbList method2(DB db, String str, String[] stuffToAdd) { 
     BasicDBList or = createDbList(stuffToAdd); 
     DBCollection table = db.getCollection(str); 
     DBCursor cur = table.find(new BasicDBObject("$or", or)); 
     while (cur.hasNext()) 
      System.out.println(cur.next().get(str)); 
     cur.close(); 
     return or; 
    } 

    public BasicDbList createDbList(String[] toAdd) { 
     BasicDbList or = new BasicDbList(); 
     for(String newString : toAdd) 
      or.add(new BasicDbObject(newString, regex)); 
     return or; 
    } 

} 
+0

hehe私はsortOrderを削除することを忘れて、私はあなたの助けを..ありがとう、その機能を削除します。私は読んでもあなたのソースを試して、あまりにも仲間を試してみて、私もあなたのソースを比較します。それは私の参照になるでしょう:) – beboy

+0

btwなぜ大文字を使用して最初の文字がclassnameはより良いと私にお勧めしますか? – beboy

+0

コーディング規約。大文字と小文字を区別せずにコードが正常に動作します。しかし、何かが大文字になっているのを見ると、自動的にクラスを考えることができ、小文字のときには、オブジェクト/メソッドを考えることができます。 http://www.oracle.com/technetwork/java/codeconventions-135099.html。 – Yaelle

関連する問題