2016-07-14 21 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, который принимает четыре аргумента.

  • строка массива с именем keys, значение которой будет присвоено BasicDBObject.
  • Значение, которое будет присвоено BasicDBObject.
  • db, с которым вы связаны.
  • и имя коллекции (таблицы), которое вы хотите прочитать из него.

то все, что вам нужно печать, чтобы позвонить 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

благодаря спариванию, она SucceS, вы помогли мне много ... я понимание об использовании метода, но я никогда не пытаюсь сделать код укоротить, чем раньше :) – beboy

+0

это мое удовольствие, удачи бро. –

1

Редактировать: Рахмат избил меня, но решил, что я мог бы также опубликовать сообщение.

Ваша проблема более долговечна, чем эффективность.

Только поместите вещи в попытку/поймать, если есть непредсказуемая причина, по которой он может потерпеть неудачу. И тогда только поместите эту строку, которая может выйти из строя, а не весь ваш код. Затем в «catch» укажите ожидаемую ошибку и то, что вы хотите сделать.

Чтение файла, анализ информации внутри и т. Д., Будет идти после улова.

Лично я предпочитаю не создавать дополнительную переменную, если они не используются более одного раза или полезны для ясности. Но это зависит от вас.

Кроме того, вы никогда не использовали 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

Хе-хе, я забыл удалить sortOrder, я стираю эту функцию до того, спасибо за вашу помощь. Я прочитаю и попробую ваш источник слишком со мной, я сравню вас, ребята, источник, также мой источник ... спасибо много. это станет моей ссылкой :) – beboy

+0

Кстати, почему вы предлагаете мне, чтобы имя класса было лучше, если первая буква с использованием заглавных букв? – beboy

+0

Условные обозначения. Ваш код будет работать нормально, независимо от его капитализации. Но когда вы видите что-то заглавное, вы можете автоматически думать о классе, а когда он строчный, вы думаете объект/метод. http://www.oracle.com/technetwork/java/codeconventions-135099.html. – Yaelle