2017-02-27 1 views
0

검색 알고리즘을 개발 중입니다. 여기에는 학생 객체의 ArrayList가 있습니다. 그리고 우리는 ArrayList에서 학생들을 검색해야합니다. 학생 클래스의 속성은 이름, 도시, 국가 및 전화 번호입니다. 이름, 도시, 국가 또는 번호를 입력하면 검색과 일치하는 학생 개체의 목록을 가져와야합니다. soppose, "john"을 검색에 입력하면 john 인 학생 개체의 목록을 가져와야합니다. 검색어에 단어가 두 개 이상 (예 : "john brazil") 인 경우 이름이 john이고 국가가 brazil 인 모든 학생 개체의 목록을 가져와야합니다. 나는 적절한 출력을 얻지 못하고 있습니다. 목록에서 나는 이름이 존이고 브라질이있는 모든 객체를 가진 모든 객체를 얻고 있습니다. 점점 (이름 || 국가)하지만 필요 (이름 & & 나라). 어떤 도움을 주시면 감사하겠습니다. 미리 감사드립니다.다중 단어 검색 키로 arraylist에 저장된 객체 검색

코드는 다음과 같습니다 :

public Class Student { 
    private String first_name; 
    private String last_name; 
    private String city; 
    private String country; 
    private int phone_number; 
} 

public ArrayList<Student> searchMethod() { 

    ArrayList<Student> initial_result_list= new ArrayList<Student>; 

    for (Student student : student_list) { 
     for (String search : array_of_search_words) { 
      if((null!=student.getName() && student.getName().contains(search)) 
      || (null!=student.getCity() && student.getCity().contains(search)) 
      || (null!=student.getCountry() && student.getCountry().contains(search)) 
      || (null!=student.getCity() && student.getCity().contains(search)) 
      || (null!=student.getPhone_number() && student.getPhone_number().contains(search))) { 

       if(!initial_result_list.contains(student)) { 
        initial_result_list.add(student); 
       } 
      } 
     } 
    } 
    return initial_result_list; 
} 

답변

0

당신은 array_of_search_words에있는 단어의 각이 Class Student의 속성 중 일부가 일치되어 있는지 확인해야합니다.

이 당신의 논리를 변경할 경우 : 많은 sumeet가 .. 당신의 방법은 일

for (Student student : student_list) { 
    bool matched = false; 
    for (String search : array_of_search_words) { 
     if((null!=student.getName() && student.getName().contains(search)) 
     || (null!=student.getCity() && student.getCity().contains(search)) 
     || (null!=student.getCountry() && student.getCountry().contains(search)) 
     || (null!=student.getCity() && student.getCity().contains(search)) 
     || (null!=student.getPhone_number() && student.getPhone_number().contains(search))) {  
     matched = true;   
     } 
     else {matched = false;break;} 

    } 
    if(!initial_result_list.contains(student) && matched) 
       initial_result_list.add(student); 
} 
+0

감사합니다! – Dipanshu