2016-07-14 2 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

은 항상 코드 단축 방법을 사용합니다. 동일한 작업을 여러 번 수행해야하는 경우 메서드를 호출하고 참인 인수를 전달하면됩니다.

코드에 몇 가지 변경 사항이 있습니다. 데이터베이스에서 일부 데이터를 인쇄하는 반복 코드를 제거했으며, 4 가지 인수를 취하는 doPrint이라는 메서드를 만들었습니다.

  • 문자열 배열 이름이 지정된 키이며, 값은 BasicDBObject에 할당됩니다.
  • BasicDBObject 님의 값이 할당됩니다.
  • 연결된 데이터베이스.
  • 및 데이터를 읽으려는 모음 (테이블) 이름.

그런 다음 인쇄 할 필요가있는

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

doPrint이 도움이 되었으면 좋겠 호출하는 것입니다.

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

: 전에보다 Lite 버전 코드를 만들려고하지 않았다. –

1

편집 : Rahmat이 나를 이길지라도, 글을 올릴 수도 있습니다.

문제는 효율성보다 오래 걸립니다.

예측할 수없는 이유가있을 경우 try/catch에 넣기 만하면 실패 할 수 있습니다. 그런 다음 모든 코드가 실패하지 않을 수있는 행을 넣으십시오. 그런 다음 '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

hehe 나는 sortOrder를 제거하는 것을 잊는다, 나는 당신의 도움을위한 감사 bfore, 그 특징을 삭제한다. 나는 당신의 근원을 읽고 너무 시도한다, 나는 당신 근원, 또한 나의 근원을 ... 비교할 것이다 너무 많이 ... 감사합니다. 그것은 내 참조가 될 것입니다 :) – beboy

+0

btw 왜 대문자를 사용하는 첫 글자가 classname이 더 나을 것이라고 제안합니까? – beboy

+0

코딩 규칙. 대문자 사용에 관계없이 코드는 정상적으로 작동합니다. 그러나 대문자로 된 것을 볼 때 자동으로 클래스를 생각할 수 있으며 소문자 일 때 오브젝트/메소드를 생각할 수 있습니다. http://www.oracle.com/technetwork/java/codeconventions-135099.html. – Yaelle